"**kwargs在Python中有什么用途?
知道可以objects.filter在桌上做一个**kwargs辩论。
也可以这样做指定时间差值ie timedelta(hours = time1)?
但是,它究竟是如何工作的?"
** 解开字典。
这个
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) o
# func(name=person.name, address=person.address)
打包一个函数的参数
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”意思是“关键字参数”):
>>> 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