首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无效解包参数

无效解包参数
EN

Stack Overflow用户
提问于 2020-01-01 22:20:24
回答 1查看 98关注 0票数 0

我正在读一份在线文档,解释解压(*args**kwargs)。被以下两个断言弄糊涂了,不知道为什么第二个函数无效。有人能帮我理解原因吗?

代码语言:javascript
复制
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/

注意:这个问题不同于TypeError: got multiple values for argument,因为它需要对参数解包装在Python中的工作方式有更多的了解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-01 22:24:48

您正在尝试将位置参数放在关键字参数之后。实际的错误消息令人困惑。我真的很惊讶,放置元组解压后,关键字是允许的。

它类似于这样做:

代码语言:javascript
复制
f(x=2, 3, 4)

这会引发一个SyntaxError

我相信不同之处在于,元组解包首先被处理,并将关键字参数移到右边。因此,有效地,您具有以下等价性:

代码语言:javascript
复制
f(x=2, *t, **d)

这和

代码语言:javascript
复制
f(*t, x=2, **d)

这就是为什么你要得到TypeError: f() got multiple values for argument 'x'

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59556558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档