【问题标题】:Invalid unpacking arguments [duplicate]无效的解包参数[重复]
【发布时间】:2020-04-20 17:14:14
【问题描述】:

我正在阅读一份解释拆包的在线文档(*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/

【问题讨论】:

  • 您的第二个断言不会产生False。你会得到一个TypeError: f() got multiple values for argument 'x' 异常。您可以删除 assert== [2, 3, 4] 部分,但仍然会出现异常。
  • 如果您搜索了该异常,您就会得到副本。不幸的是,您甚至没有在您的问题中包含它,否则我们会尽快为您找到重复的。

标签: python argument-unpacking


【解决方案1】:

您试图在关键字参数之后放置一个位置参数。实际的错误消息令人困惑。老实说,我很惊讶在允许关键字之后放置元组解包。

类似于做:

f(x=2, 3, 4)

这会引发SyntaxError

我相信区别在于首先处理元组解包并将关键字参数向右移动。如此有效,你有这个等价物:

f(x=2, *t, **d)

是一样的

f(*t, x=2, **d)

这就是你收到TypeError: f() got multiple values for argument 'x'的原因

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
相关资源
最近更新 更多