为什么使用可迭代的拆包无效语法对元组进行扩充分配?

时间:2019-05-15 20:38:00

标签: python-3.x

这可以:

a = 1, 2, 3
b = *a,

但这是无效的语法:

b += *a,

这可以:

b += (*a,)

更新

来自documentation

assignment_stmt :: =(target_list“ =”)+( starred_expression | yield_expression)

augmented_assignment_stmt :: = augtarget augop( expression_list | yield_expression)

因此,分配和扩展分配的规范有所不同-扩展分配具有 expression_list ,而不是 starred_expression

不过,如果有人可以用简单的语言解释原因,那就太好了。 :)

1 个答案:

答案 0 :(得分:1)

可能来自operator precedence的“(表达式...)”是最高的。当元组被隐式定义时,不确定这种情况。 看看这个:

>>> a = (1, 2, 3)
>>> b = (1, 2, 3)
>>> b = b + *a,
  File "<stdin>", line 1
    b = b + *a,
            ^
SyntaxError: invalid syntax
>>> b = b + (*a,)
>>> b
(1, 2, 3, 1, 2, 3)