在 Python 中是否像在 C 中一样具有特殊含义?我在 Python Cookbook 中看到了这样的函数:
def get(self, a, *kw)
请您向我解释一下或指出我在哪里可以找到答案(Google 将 * 解释为通配符,因此我找不到满意的答案)。
请参阅语言参考中的函数定义。
如果表单*identifier存在,则将其初始化为接收任何多余位置参数的元组,默认为空元组。如果表单**identifier存在,则将其初始化为接收任何多余关键字参数的新字典,默认为新的空字典。
*identifier
**identifier
另请参阅函数调用。
假设人们知道位置参数和关键字参数是什么,这里有一些例子:
示例 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")
a, b, c正如您在上面的示例中看到的,我们在函数的签名中只有参数foo。由于d和k不存在,它们被放入 args 字典。程序的输出是:
a, b, c
foo
d
k
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它们打包成一个元组,所以这个程序的输出是:
*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',)