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

12 浏览
0 Comments

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

这个问题在这里已经有了答案:

使用**(双星号/星号)和*(星号/星号)对参数有什么作用?

在Python中,**kwargs的用途是什么?

我知道你可以在表上执行一个对象过滤器,并传递一个**kwargs参数。

我也可以用它来指定时间差,比如timedelta(hours=time1)吗?

它究竟是如何工作的?它被归类为“解包”吗?像a,b=1,2一样?

admin 更改状态以发布 2023年5月21日
0
0 Comments

解包字典

** 解包字典。

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

资源链接

0
0 Comments

你可以使用**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()

0