`**kwargs`参数是从`formfield_for_manytomany`函数中来的,它用于将多对多关系中的字段转换为表单字段。
`**kwargs`参数是从`formfield_for_manytomany`函数中来的,它用于将多对多关系中的字段转换为表单字段。
这个问题在这里已经有了答案:
**kwargs
在 Python 中有什么用途?
我知道你可以在表格上使用 objects.filter
并传递一个 **kwargs
参数。
我也可以使用它来指定时间差,例如 timedelta(hours = time1)
?
它是如何工作的?它被归类为“解包”吗?例如 a,b=1,2
?
admin 更改状态以发布 2023年5月21日
解压字典
**
解压字典。
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 Tutorial中有很好的解释以及一些很好的例子。
Python 3更新
对于Python 3,不再使用iteritems()
,而使用items()