在语言参考中见函数定义。如果表单*标识符存在,它将被初始化为接收任何多余位置参数的元组,默认为空元组。 如果表单**标识符存在,它将被初始化为一个接收任何多余关键字参数的新字典,默认为一个新的空字典。
另外,见函数调用...
假设知道位置和关键字参数是什么,下面是一些示例:
例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 = 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',)