**kwargs的用途和作用是什么?
**kwargs的用途和作用是什么?
这个问题在这里已经有了答案:
使用**(双星号/星号)和*(星号/星号)对参数有什么作用?
在Python中,**kwargs的用途是什么?
我知道你可以在表上执行一个对象过滤器,并传递一个**kwargs参数。
我也可以用它来指定时间差,比如timedelta(hours=time1)吗?
它究竟是如何工作的?它被归类为“解包”吗?像a,b=1,2一样?
admin 更改状态以发布 2023年5月21日
解包字典
**
解包字典。
这
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
是用于关键字参数的变量名,可以使用其他变量名。重要的是它是一个字典,并且使用双星号操作符**
解包。- 其他可迭代对象使用单星号操作符
*
来解包。 - 为避免混淆,最好使用已被认可的变量名,即对于字典和其他可迭代对象分别使用
kwargs
和args
。
资源链接
你可以使用**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()
。