我只是好奇**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)
您必须为字典构建自己的格式(没有其他内容了**kwargs):
print(','.join('{0}={1!r}'.format(k,v) for k,v in this.items()))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12908 次 |
| 最近记录: |