有什么办法可以在 Python 中打印 \*\*kwargs

新手上路,请多包涵

我只是好奇 **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 许可协议

阅读 834
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()]))

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 python 3 中使用 f-strings 对我有用:

 def mixAndMatch(*args, **kwargs):
    print(f' Args: {args}' )
    print(f' Kwargs: {kwargs}' )

mixAndMatch('one', 'two', arg3 = 'three', arg4 = 'four’)

>>>
Args: ('one', 'two')
Kwargs: {'arg3': 'three', 'arg4': 'four'}

原文由 Keno 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题