在python中传递参数时参数之前做什么**?

时间:2009-07-24 18:03:20

标签: python

  

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

通过阅读这个例子以及我对Python的渺小知识,它必须是将数组转换为字典或其他内容的快捷方式吗?

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

4 个答案:

答案 0 :(得分:11)

在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

答案 1 :(得分:1)

def somefunction(keyword1, anotherkeyword):
   pass

可以称为

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

答案 2 :(得分:1)

来自Python docuemntation, 5.3.4

  

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

这也用于the power operator,在不同的背景下。

答案 3 :(得分:1)

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