动态地将不同参数传递给预定义函数。
动态地将不同参数传递给预定义函数。
这个问题已经有了答案:
在Python中,**kwargs
有什么用途?
我知道你可以在一个表上执行objects.filter
并传递 **kwargs
参数。
我也可以用它来指定时间差,例如timedelta(hours = time1)
?
它到底是如何工作的? 它被归类为“拆包”吗? 像a,b = 1,2
?
admin 更改状态以发布 2023年5月23日
解包字典
**
解包字典。
This
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" 的意思是 "keyword arguments"):
>>> 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()