**kwargs的目的和用途是什么?

2022-09-05 01:18:21

在Python中有什么用途?**kwargs

我知道你可以在一个表上做一个,然后传入一个参数。objects.filter**kwargs

我也可以这样做来指定时间增量,即?timedelta(hours = time1)

它究竟是如何工作的?它是否被归类为“拆包”?喜欢?a,b=1,2


答案 1

您可以使用 来让函数采用任意数量的关键字参数(“kwargs”表示“关键字参数”):**kwargs

>>> def print_keyword_args(**kwargs):
...     # kwargs is a dict of the keyword args passed to the function
...     for key, value in kwargs.iteritems():
...         print "%s = %s" % (key, value)
... 
>>> print_keyword_args(first_name="John", last_name="Doe")
first_name = John
last_name = Doe

在调用函数时,还可以通过构造关键字参数的字典并将其传递给函数来使用该语法:**kwargs

>>> kwargs = {'first_name': 'Bobby', 'last_name': 'Smith'}
>>> print_keyword_args(**kwargs)
first_name = Bobby
last_name = Smith

Python教程包含了它如何工作的良好解释,以及一些很好的例子。

Python 3 更新

对于 Python 3,请使用 items() 代替iteritems()


答案 2

解压缩词典

**解压缩字典。

func(a=1, b=2, c=3)

与 相同

args = {'a': 1, 'b': 2, 'c':3}
func(**args)

如果您必须构造参数,这将非常有用:

args = {'name': person.name}
if hasattr(person, "address"):
    args["address"] = person.address
func(**args)  # either expanded to func(name=person.name) or
              #                    func(name=person.name, address=person.address)

函数的打包参数

  • 用于代替 python 3.items().iteritems()
def setstyle(**styles):
    for key, value in styles.iteritems():      # styles is a regular dictionary
        setattr(someobject, key, value)

这使您可以像这样使用该函数:

setstyle(color="red", bold=False)

笔记

  • kwargs是用于关键字参数的变量名,可以使用另一个变量名。重要的部分是它是一本字典,它使用双星号运算符解压缩。**
  • 其他可迭代对象使用单个星号运算符解包*
  • 为了防止混淆,最好分别使用可识别的变量名称和 ,分别用于字典和其他可迭代对象。kwargsargs

资源