星号*在Python中是什么意思?

问题:

*在Python中有什么特别的含义吗?我在Python Cookbook中看到这样的功能:

def get(self, *a, **kw)

请你向我解释一下,或者指出我可以找到答案(Google将*视为通配符,因此我找不到令人满意的答案)。
非常感谢你。

回答:

请参阅语言参考中的Function Definitions

如果表单*identifier存在,则将其初始化为接收任何多余位置参数的元组,默认为空元组。如果存在形式**identifier,它将被初始化为一个新的字典,接收任何多余的关键字参数,默认为一个新的空字典。

另请参见Function Calls
假设一个人知道什么位置和关键字参数,这里有一些例子:
示例1:

# Excess keyword argument (python 2) example:
def foo(a, b, c, **args):
    print "a = %s" % (a,)
    print "b = %s" % (b,)
    print "c = %s" % (c,)
    print args

foo(a="testa", d="excess", c="testc", b="testb", k="another_excess")

如上例所示,我们在foo函数的签名中只有参数a, b, c。由于dk不存在,它们被放入了args字典中。程序的输出是:

a = testa
b = testb
c = testc
{'k': 'another_excess', 'd': 'excess'}

示例2:

# Excess positional argument (python 2) example:
def foo(a, b, c, *args):
    print "a = %s" % (a,)
    print "b = %s" % (b,)
    print "c = %s" % (c,)
    print args

foo("testa", "testb", "testc", "excess", "another_excess")

在这里,由于我们正在测试位置参数,所以过多的值必须在结尾,*args将它们包装成一个元组,所以这个程序的输出是:

a = testa
b = testb
c = testc
('excess', 'another_excess')

您还可以将字典或元组解包成函数的参数:

def foo(a,b,c,**args):
    print "a=%s" % (a,)
    print "b=%s" % (b,)
    print "c=%s" % (c,)
    print "args=%s" % (args,)

argdict = dict(a="testa", b="testb", c="testc", excessarg="string")
foo(**argdict)

打印:

a=testa
b=testb
c=testc
args={'excessarg': 'string'}

def foo(a,b,c,*args):
    print "a=%s" % (a,)
    print "b=%s" % (b,)
    print "c=%s" % (c,)
    print "args=%s" % (args,)

argtuple = ("testa","testb","testc","excess")
foo(*argtuple)

打印:

a=testa
b=testb
c=testc
args=('excess',)

 
 Code问答: codewenda.com
Stackoverflow:What does asterisk * mean in Python?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 3 = 2