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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4