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

Kal*_*ane 11 python

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

def print_dict(**kwargs):
    print(kwargs)
print_dict(x=1,y=2,z=3)  
Run Code Online (Sandbox Code Playgroud)

这给出了输出:{'y': 2, 'x': 1, 'z': 3} 所以我想出为什么不反过来打印出类似的东西x=1,y=2,z=3

所以我尝试了这个:

mydict = {'x':1,'y':2,'z':3}
print(**mydict)
Run Code Online (Sandbox Code Playgroud)

但我得到了一个错误:( 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)
Run Code Online (Sandbox Code Playgroud)

看到这个工作:

def print_dict(**this):
    print(this)
mydict = {'x':1,'y':2,'z':3}
print_dict(**mydict)
Run Code Online (Sandbox Code Playgroud)

但不是print(this)如果我这样做print(**this)会给出错误.

我们可以*arg在尝试此代码时进行打印:

def num(*tuple_num):
    print(tuple_num)
    print(*tuple_num)
num(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

它完美运行并输出如下:

(1, 2, 3, 4)
1 2 3 4
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有任何可能的解决方案/打印方式**kwargs

Mar*_*ers 13

语法callable(**dictionary) 应用字典,就像使用单独的关键字参数一样.

你的榜样如此:

mydict = {'x':1,'y':2,'z':3}
print(**mydict)
Run Code Online (Sandbox Code Playgroud)

内部翻译为:

print(x=1, y=2, z=3)
Run Code Online (Sandbox Code Playgroud)

其中确切的排序取决于当前的随机散列种子.由于print()不支持这些关键字参数,因此调用失败.

另一个print()调用成功,因为您将值作为单独的位置参数传递:

tuple_num = (1, 2, 3, 4)
print(*tuple_num)
Run Code Online (Sandbox Code Playgroud)

实际上与以下内容相同:

print(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)

并且该print()函数通过将它们中间的sep值逐个写出(默认为空格)来支持单独的参数.

**dictionary调用之外的语法无效.由于callable(**dictionary)是调用语法的一部分,而不是对象,因此无需打印.

最多,您可以将字典格式化为看起来像调用:

print(', '.join(['{}={!r}'.format(k, v) for k, v in mydict.items()]))
Run Code Online (Sandbox Code Playgroud)


Ken*_*eno 10

在 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'}
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 5

您必须为字典构建自己的格式(没有其他内容了**kwargs):

print(','.join('{0}={1!r}'.format(k,v) for k,v in this.items()))
Run Code Online (Sandbox Code Playgroud)