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)
Cheers,
Nick.
Ah I see. A quick test verifies exactly this:
>>> import _ast
>>> ast = compile("p = x, y = 1, 2", "<string>", "exec",
_ast.PyCF_ONLY_AST)
>>> ast.body[0]
<_ast.Assign object at 0xb7d0122c>
>>> ast.body[0].targets
[<_ast.Name object at 0xb7d0124c>, <_ast.Tuple object at 0xb7d0128c>]
>>> ast.body[0].value
<_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).
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