[Python-Dev] Tuple pack/unpack and the definition of AST Assign nodes
Nick Coghlan
ncoghlan at gmail.com
Mon Jun 9 16:04:05 CEST 2008
Thomas Lee wrote:
> In porting one of the old peephole optimizations to the new AST compiler
> I noticed something weird going on with the following code:
>
> a, b, c = 1, 2, 3
>
> Now, as you would expect this gets parsed into an Assign node. That
> Assign node looks like the following:
>
> Assign.targets = [Tuple(Name(a), Name(b), Name(c))]
> Assign.value = Tuple(1, 2, 3)
>
> What's weird here is that Assign.targets is an asdl_seq ... why are we
> wrapping the names in a Tuple() node? Shouldn't it look something more
> like this:
>
> Assign.targets = [Name(a), Name(b), Name(c)]
>
> I understand that parsing the testlist might yield a tuple and it was
> thus easier to just use the tuple rather than unpack it into an asdl_seq
> ... but if this was the intention, then why is Assign.targets an expr*
> rather than a plain old expr?
I haven't looked at that code recently, but I believe the ADSL sequence
in the assignment node is for statements where there are actually
multiple assignment targets, such as:
>>> p = x, y = 1, 2
>>> p, x, y
((1, 2), 1, 2)
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
More information about the Python-Dev
mailing list