看这个例子(使用 python 2.7.6):
>>> def func(a, b, c, d):
print a, b, c, d
>>> func(1, c = 3, *(2,), **{'d':4})
1 2 3 4
到目前为止,一切都很好。但是,为什么下面的调用失败了?
>>> func(1, b = 3, *(2,), **{'d':4})
Traceback (most recent call last):
File "<pyshell#69>", line 1, in <module>
func(1, b = 3, *(2,), **{'d':4})
TypeError: func() got multiple values for keyword argument 'b'
最佳答案
用另一个函数签名可以更好地理解
>>> def func(*args, **kw):
print(args, kw)
>>> func(1, b = 3, *(2,), **{'d':4})
(1, 2) {'b': 3, 'd': 4}
因此,位置参数和关键字参数都放在一起。
使用原始签名,意味着2
和3
都将被分配给b
,这是无效的。
PS:由于简单的元组解包不提供名称,因此这些值将被视为位置参数。
关于python - 函数参数解包错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20148697/