这可以:
a = 1, 2, 3
b = *a,
但这是无效的语法:
b += *a,
这可以:
b += (*a,)
更新
assignment_stmt :: =(target_list“ =”)+( starred_expression | yield_expression)
augmented_assignment_stmt :: = augtarget augop( expression_list | yield_expression)
因此,分配和扩展分配的规范有所不同-扩展分配具有 expression_list ,而不是 starred_expression 。
不过,如果有人可以用简单的语言解释原因,那就太好了。 :)
答案 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)