有没有办法在Python中打印** kwargs

时间:2016-09-21 18:23:05

标签: 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),则代替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

4 个答案:

答案 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