Thomas Lee wrote:
Nick Coghlan wrote:
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)
Ah I see. A quick test verifies exactly this:
import _ast ast = compile("p = x, y = 1, 2", "<string>", "exec",
<_ast.Assign object at 0xb7d0122c>
[<_ast.Name object at 0xb7d0124c>, <_ast.Tuple object at 0xb7d0128c>]
<_ast.Tuple object at 0xb7d0132c>
I thought this would have been implemented as nested Assign nodes, but I'm obviously wrong. :) Thanks for the clarification.
It's one of the key differences between Python's "assignment as a statement" and C-style "assignment as an expression" - nested Assignment nodes are meaningful with the latter approach, but nonsensical with the way Python defines assignment (the rightmost expression is evaluated once and then assigned to each of the target expressions from left to right).