【问题标题】:Why is a destructuring augmented assignment not possible?为什么不可能进行解构增强分配?
【发布时间】:2025-12-09 09:00:01
【问题描述】:

在 python 中可以进行解构:

a, b = 1, 2

增强赋值也是可能的:

b += 1

但是有什么原因不能进行解构增强赋值吗?:

a, b += 1, 2
> SyntaxError: illegal expression for augmented assignment

据我所知,解构是一种语言。它不能被object.__add__()之类的东西修改。为什么语言不会在扩充作业的每个部分分别调用 object.__iadd__()

【问题讨论】:

  • 就个人而言,当我查看a, b += 1, 2 时,我不确定它应该做什么。 (a, b) + (1, 2) 等于 (1, 2, 1, 2) 所以我希望 (a, b) += (1, 2)(a, b) = (a, b) + (1, 2) 相同,等于 (a, b) = (1, 2, 1, 2) 但你如何解压呢?
  • 可能是因为基础表达式a,b = a,b + 1,2无效。
  • 这些 cmets 很有道理,谢谢。我想我的问题是,为什么在解构规则之前应用了增强规则。 a, b += 1, 2 => a = a + 1; b = b + 2 也许答案是,它可能会让人困惑。
  • 我不清楚,如果允许这样的语法,如何评估像 a, b += 1, a 这样的表达式。我们应该先评估a += 1,然后得到a',而不是b += a',还是只评估a += 1b += a?看起来这是一种未定义的行为。
  • 我认为@MikhailStepanov 找到了一个很好的答案来解释为什么这不起作用,谢谢!

标签: python destructuring augmented-assignment


【解决方案1】:

可能是因为表达式中的未定义行为,例如:

a, b += 1, a

应该如何评估?像这样

a' = a + 1
b = b + a'

或者只是

b = b + a
a = a + 1

- 不清楚。因此,不允许解构增广赋值。

【讨论】: