我对**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
?
答案 0 :(得分:12)
语法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()]))
答案 1 :(得分:5)
您必须为字典构建自己的格式(没有其他内容为**kwargs
):
print(','.join('{0}={1!r}'.format(k,v) for k,v in this.items()))
答案 2 :(得分:5)
在python 3中使用f字符串对我有用:
df.info()
答案 3 :(得分:0)
使用$(gitRepoName)
软件包,可以轻松打印kwargs
:
pprint
调用from pprint import pprint
pprint(kwargs)
的输出示例:
requests.get