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

Kalpesh Dusane:

我只是好奇**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

马丁·彼得斯(Martijn Pieters):

该语法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()]))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章