我只是好奇 **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)
如果我这样做 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
?
原文由 Kalpesh Dusane 发布,翻译遵循 CC BY-SA 4.0 许可协议
语法
callable(**dictionary)
应用 字典,就像您使用单独的关键字参数一样。所以你的例子:
内部翻译为:
其中确切的顺序取决于当前的随机哈希种子。由于
print()
不支持这些关键字参数,因此调用失败。另一个
print()
调用成功,因为您将值作为单独的 位置 参数传入:实际上与以下内容相同:
和
print()
函数通过使用sep
之间的值(默认情况下为空格)一个一个地写出它们来支持单独的参数。**dictionary
不是调用之外的有效语法。因为callable(**dictionary)
是调用语法的一部分,而不是对象,所以 没有什么可打印 的。最多,您可以将字典 格式化 为看起来像调用: