Skip to main content
 首页 » 编程设计

python之Python 方法定义中的 "**params"语法是什么

2025年05月04日14Renyi-Fan

所以我正在为谷歌应用引擎搜索库尝试新的 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