考虑一个带有默认参数的函数:
def func(foo=3):
print(foo)
参数的结构(原则上)非常类似于字典。函数 foo (本质上)有一个默认参数的字典(在这种情况下{'foo':3}
)。现在,假设您不想在函数调用中使用关键字,但您想使用字典来代替 - 然后您可以调用foo
:
d = {"foo":8}
func(**d)
这使您可以动态更改传递给函数的参数func
。
如果您尝试以下操作,这会变得更有趣:
d = {"foo":8, "bar":12}
func(**d)
这不起作用(它等效于foo(foo=8, bar=12)
,但由于bar
不是有效参数,因此失败)。
您可以通过将这些额外的参数放在foo
.
def func( foo=3, **kwargs ):
print(foo,kwargs)
现在,尝试:
d = {"foo":8, "bar":12}
func(**d) #prints (8, {'bar':12})
所有额外的关键字参数都进入函数内部的 kwargs 字典。
这也可以称为:
func(foo=8, bar=12)
结果相同。
如果 funcA 调用 funcB 并且您希望 funcA 接受 funcB 的所有关键字(加上一些额外的关键字),这通常很有用,这在处理类和继承时很常见:
def funcA(newkey=None,**kwargs):
funcB(**kwargs)
最后,这是文档的链接