为了账号安全,请及时绑定邮箱和手机立即绑定

*kwargs的用途和用途是什么?

*kwargs的用途和用途是什么?

翻翻过去那场雪 2019-06-01 14:21:06
*kwargs的用途和用途是什么?有什么用途**kwargs用Python?我知道你可以objects.filter在一张桌子上**kwargs争论。我也可以这样做来指定时间三角洲吗?timedelta(hours = time1)?它到底是怎么工作的?是“拆包”类吗?喜欢a,b=1,2?
查看完整描述

3 回答

?
米琪卡哇伊

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()


查看完整回答
反对 回复 2019-06-01
?
慕妹3242003

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)

这样,您不需要每次调用例程更改时都更改接口函数的签名。


查看完整回答
反对 回复 2019-06-01
  • 3 回答
  • 0 关注
  • 640 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信