无效的解包参数
Invalid unpacking arguments
我正在阅读解释解包的在线文档(*args
和 **kwargs
)。被两个断言弄糊涂了,不确定为什么第二个函数无效。任何人都可以帮助我理解原因吗?
def f(x, y, z):
return [x, y, z]
t = (3,)
d = {"z": 4}
assert f(2, *t, **d) == [2, 3, 4]
assert f(x=2, *t, **d) == [2, 3, 4] # TypeError: f() got multiple values for argument 'x'
参考
https://caisbalderas.com/blog/python-function-unpacking-args-and-kwargs/
您正试图将位置参数放在关键字参数之后。实际的错误消息令人困惑。老实说,我很惊讶在允许关键字之后放置元组解包。
这类似于做:
f(x=2, 3, 4)
这引发了 SyntaxError
。
我认为区别在于首先处理元组解包并将关键字参数向右移动。如此有效,你有这个等价物:
f(x=2, *t, **d)
与
一样
f(*t, x=2, **d)
这就是您获得 TypeError: f() got multiple values for argument 'x'
的原因
我正在阅读解释解包的在线文档(*args
和 **kwargs
)。被两个断言弄糊涂了,不确定为什么第二个函数无效。任何人都可以帮助我理解原因吗?
def f(x, y, z):
return [x, y, z]
t = (3,)
d = {"z": 4}
assert f(2, *t, **d) == [2, 3, 4]
assert f(x=2, *t, **d) == [2, 3, 4] # TypeError: f() got multiple values for argument 'x'
参考 https://caisbalderas.com/blog/python-function-unpacking-args-and-kwargs/
您正试图将位置参数放在关键字参数之后。实际的错误消息令人困惑。老实说,我很惊讶在允许关键字之后放置元组解包。
这类似于做:
f(x=2, 3, 4)
这引发了 SyntaxError
。
我认为区别在于首先处理元组解包并将关键字参数向右移动。如此有效,你有这个等价物:
f(x=2, *t, **d)
与
一样f(*t, x=2, **d)
这就是您获得 TypeError: f() got multiple values for argument 'x'