Python 3000 idea: reversing the order of chained assignments

Steve Holden steve at holdenweb.com
Thu Mar 22 05:55:03 EDT 2007


Duncan Booth wrote:
> "Virgil Dupras" <hardcoded.software at gmail.com> wrote:
> 
>> I think I see what Marcin means. The 'node' is changed too fast in the
>> chain, and next is assigned to 'nextnode' instead of being assigned to
>> node.
> 
> I can see why Marcin was confused. Many other languages assignment is an 
> expression, so a=b=c is simply a=(b=c). In Python it isn't an expression, 
> the chained assignment is a specific part of the syntax, so (as with 
> chained comparisons) the semantics may be surprising to the uninitiated.
> 
> As a matter of interest do PyLint or PyChecker check for this situation 
> (chained assignment where the target of an assignment is also a 
> subexpression of a later assignment)?
> 
Where's the published syntax for chained assignment?

> Also it may be worth noting that unpacking has a similar behaviour:
> 
>    node, node.next = nextnode, nextnode
> 
> has the same result as the chained assignment: the RHS is a tuple and is 
> fully evaluated before the assignment, but the LHS is not a tuple and the 
> assignment happens strictly left to right with each assignment fully 
> completed before proceeding to the next one.
> 
Well that is explained (albeit badly) in the reference manual:

"""An assignment statement evaluates the expression list (remember that 
this can be a single expression or a comma-separated list, the latter 
yielding a tuple) and assigns the single resulting object to each of the 
target lists, from left to right."""

That wording appears to be a rather bad mix of factoids from unpacking 
and chained assignment. Is it just me, or does this whole section need a 
rewrite?

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Skype: holdenweb     http://del.icio.us/steve.holden
Recent Ramblings       http://holdenweb.blogspot.com




More information about the Python-list mailing list