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   |   [EMAIL PROTECTED]   |   Brisbane, Australia
---------------------------------------------------------------
            http://www.boredomandlaziness.org
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to