这个 Python 代码中的 * 是用来获得清晰的输出的吗?
这个 Python 代码中的 * 是用来获得清晰的输出的吗?
这个问题已经得到了回答:
在Python中,*有像C语言中那样的特殊含义吗?我在Python Cookbook中看到这样一个函数:
def get(self, *a, **kw)
请您解释它的含义,或者指出我可以找到答案的地方(Google将*解释为通配字符,因此我找不到令人满意的答案)。
admin 更改状态以发布 2023年5月21日
查看 函数定义 语言参考。
如果使用了形式为
*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")
如上例所示,函数foo
的签名中只有参数a、b、c
。由于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',)