在Python中,参数前的**有什么作用?

5 投票
4 回答
4088 浏览
提问于 2025-04-15 13:08

从这个例子和我对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

撰写回答