Why is augmented assignment of a tuple with iterable unpacking invalid syntax?
Eugene Alterman <eugalt at gmail.com> writes:
> a = 1, 2, 3
> b = *a, # assignment - OK
> b += *a, # augmented assignment - syntax error
> Need to enclose in parenthesis:
> b += (*a,)
> Why isn't it allowed with an augmented assignment, while it is OK with a
> regular assignment?
Syntactically (i.e. according to the grammar):
The right-hand side of an assignment has as one of the alternative a starred_expression, which includes starred and unstarred expressions.
The right-hand side of an augmented assignment has an expression_list there. (The other option is both cases is a yield_expression.) And if it is a list (i.e. there is a comma in it), it is a tuple.
x += y is more or less equivalent to x = x + y, except that x is only evaluated once, and y is treated as a unity (think implicit parentheses around it). So the y is basically part of an expression. But starred expressions are not allowed in expressions, except within explicit parentheses.
Piet van Oostrum <piet-l at vanoostrum.org>
PGP key: [8DAE142BE17999C4]