3 回答
![?](http://img1.sycdn.imooc.com/54585050000156a302200220-100-100.jpg)
TA贡献1998条经验 获得超6个赞
你可以用**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教程包含了对它的工作原理的一个很好的解释,还有一些很好的例子。
<--Update-->
对于使用Python 3的人,使用Item()而不是iterItem()
![?](http://img1.sycdn.imooc.com/54586870000183e302200220-100-100.jpg)
TA贡献1824条经验 获得超6个赞
kwargs只是一个字典,它被添加到参数中。
字典可以包含键值对。那就是小矮人。好吧,就是这样。
事情并不那么简单。
例如,(非常假设的)您有一个接口,它只调用其他例程来完成任务:
def myDo(what, where, why): if what == 'swim': doSwim(where, why) elif what == 'walk': doWalk(where, why) ...
现在,您得到了一种新的方法“驱动”:
elif what == 'drive': doDrive(where, why, vehicle)
但是等一下,有一个新的参数“Vehicle”-你以前不知道。现在,您必须将它添加到mydo函数的签名中。
在这里,你可以把kwargs扔进游戏中-你只需在签名中添加kwargs:
def myDo(what, where, why, **kwargs): if what == 'drive': doDrive(where, why, **kwargs) elif what == 'swim': doSwim(where, why, **kwargs)
这样,您不需要每次调用例程更改时都更改接口函数的签名。
添加回答
举报