【问题标题】:In python when passing arguments what does ** before an argument do? [duplicate]在python中传递参数时,参数前的**做什么? [复制]
【发布时间】:2010-11-13 20:00:45
【问题描述】:

可能重复:
What does *args and **kwargs mean?

从阅读这个例子和我对 Python 的浅薄知识来看,它一定是将数组转换为字典之类的快捷方式吗?

class hello:
    def GET(self, name):
        return render.hello(name=name)
        # Another way:
        #return render.hello(**locals())

【问题讨论】:

  • 其实这并不是真正的复制。这个问题询问用f(**d) 调用函数是什么意思,而另一个问题似乎更多关于函数参数定义中的***

标签: python


【解决方案1】:

在python中f(**d)将字典d中的值作为关键字参数传递给函数f。同样,f(*a) 将数组 a 中的值作为位置参数传递。

举个例子:

def f(count, msg):
  for i in range(count):
    print msg

**d*a调用这个函数:

>>> d = {'count': 2, 'msg': "abc"}
>>> f(**d)
abc
abc
>>> a = [1, "xyz"]
>>> f(*a)
xyz

【讨论】:

    【解决方案2】:

    来自Python docuemntation, 5.3.4

    如果任何关键字参数不对应于形式参数名称,则会引发 TypeError 异常,除非存在使用语法 **identifier 的形式参数;在这种情况下,该形式参数接收一个包含多余关键字参数的字典(使用关键字作为键,参数值作为对应值),或者如果没有多余的关键字参数,则接收一个(新的)空字典。

    这也用于the power operator,在不同的上下文中。

    【讨论】:

      【解决方案3】:

      **local() 传递调用者本地命名空间对应的字典。当传递带有 ** 的函数时,会传递一个字典,这允许可变长度的参数列表。

      【讨论】:

        【解决方案4】:

        它将字典“解包”为参数列表。 即:

        def somefunction(keyword1, anotherkeyword):
           pass
        

        它可以被称为

        somefunction(keyword1=something, anotherkeyword=something)
        or as
        di = {'keyword1' : 'something', anotherkeyword : 'something'}
        somefunction(**di)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-24
          • 1970-01-01
          • 2012-05-22
          • 1970-01-01
          • 2013-12-24
          • 1970-01-01
          • 2021-11-22
          • 1970-01-01
          相关资源
          最近更新 更多