在Python中,参数前的**有什么作用?
从这个例子和我对Python的简单了解来看,这应该是一个把数组转换成字典的快捷方式,或者类似的东西吧?
class hello:
def GET(self, name):
return render.hello(name=name)
# Another way:
#return render.hello(**locals())
4 个回答
1
根据Python文档第5.3.4节的说明:
如果你传入的任何关键字参数(也就是带名字的参数)没有对应到函数里定义的参数名,就会出现一个类型错误(TypeError)。不过,如果函数里有一个参数是用**标识符这种写法定义的,那么这个参数就会接收一个字典,里面包含了多余的关键字参数(字典的键是这些参数的名字,值是对应的参数值)。如果没有多余的关键字参数,那么这个参数会接收一个空字典。
这种用法在幂运算符中也会用到,但场景不同。
1
它把一个字典“拆开”,变成一个参数列表。
也就是说:
def somefunction(keyword1, anotherkeyword):
pass
它可以这样被调用:
somefunction(keyword1=something, anotherkeyword=something)
or as
di = {'keyword1' : 'something', anotherkeyword : 'something'}
somefunction(**di)
12
在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