有没有办法用Python打印**kwargs

2024-05-13 23:15:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是对**kwargs很好奇。我刚开始学习,所以在复习stackoverflow和视频教程的所有问题时,我注意到我们可以这样做

def print_dict(**kwargs):
    print(kwargs)
print_dict(x=1,y=2,z=3)  

输出为:{'y': 2, 'x': 1, 'z': 3} 所以我想为什么不反过来打印类似的x=1,y=2,z=3

所以我试了一下:

mydict = {'x':1,'y':2,'z':3}
print(**mydict)

但是我得到了一个错误,比如:TypeError: 'z' is an invalid keyword argument for this function(有时它显示“y”是一个无效的关键字)。

我还尝试将其分配给变量,然后打印它,但再次出现错误(SyntaxError: invalid syntax):

mydict = {'x':1,'y':2,'z':3}
var = **mydict
print(var)

看到这是工作:

def print_dict(**this):
    print(this)
mydict = {'x':1,'y':2,'z':3}
print_dict(**mydict)

但是如果我这样做的话,它会给出错误,而不是print(this)

当我尝试以下代码时,我们可以打印*arg

def num(*tuple_num):
    print(tuple_num)
    print(*tuple_num)
num(1,2,3,4)

它运行良好,输出如下:

(1, 2, 3, 4)
1 2 3 4

所以我想知道是否有任何可能的解决方案/方法来打印**kwargs


Tags: isvardef错误thisstackoverflownumdict
2条回答

语法callable(**dictionary)应用于字典,就像使用单独的关键字参数一样。

你的例子是:

mydict = {'x':1,'y':2,'z':3}
print(**mydict)

内部翻译为:

print(x=1, y=2, z=3)

确切的顺序取决于当前的随机散列种子。由于print()不支持这些关键字参数,调用失败。

另一个print()调用成功,因为您将值作为单独的位置参数传入:

tuple_num = (1, 2, 3, 4)
print(*tuple_num)

实际上与:

print(1, 2, 3, 4)

print()函数通过在sep值之间(默认情况下是空格)逐个写出参数来支持单独的参数。

调用外部的**dictionary语法无效。因为callable(**dictionary)是调用语法的一部分,而不是对象,所以没有什么可以打印的。

最多,您可以格式化字典,使其看起来像调用:

print(', '.join(['{}={!r}'.format(k, v) for k, v in mydict.items()]))

您必须为字典构建自己的格式(没有其他内容是**kwargs):

print(','.join('{0}={1!r}'.format(k,v) for k,v in this.items()))

相关问题 更多 >