所以我正在为谷歌应用引擎搜索库尝试新的 python 代码,我遇到了一个奇怪的语法。这是:
cls_createDocument(**params)
其中 params 是一个字典。
this 引用的函数是:
@classmethod
def _createDocument(
cls, pid=None, category=None, name=None, description=None,
category_name=None, price=None, **params)
我的问题是,**params 表示什么以及它对对象有什么作用?
谢谢! 乔恩
请您参考如下方法:
考虑一个带有默认参数的函数:
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)
最后,这是一个link to the documentation
