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

5hcedyr0  于 2022-12-28  发布在  Python
关注(0)|答案(5)|浏览(219)

我只是对**kwargs很好奇,我刚刚开始学习它,所以在浏览stackoverflow和视频教程的所有问题时,我注意到我们可以这样做

def print_dict(**kwargs):
    print(kwargs)
print_dict(x=1,y=2,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

vsikbqxv

vsikbqxv1#

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

mwngjboj2#

在python3中使用f-string对我来说很有效:

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'}
sd2nnvve

sd2nnvve3#

您必须为字典构建自己的格式(其他格式都是**kwargs):

print(','.join('{0}={1!r}'.format(k,v) for k,v in this.items()))
r7s23pms

r7s23pms4#

使用pprint包可以轻松打印kwargs

from pprint import pprint
pprint(kwargs)

调用requests.get的输出示例:

{'allow_redirects': True, 'verify': False}
knpiaxh1

knpiaxh15#

@keno的答案简化如下:
使用f-string

print(f"{kwargs}")

相关问题