[Tim]
>> I expected that, given that expressions "naturally nest", chained
>> targets could still be specified:
>>
>>     a := b := c:= 5
>>
>> but since they're all plain names there's no way to tell whether the
>> bindings occur "left to right" or "right to left" short of staring at
>> the generated code.

[Nick Coghlan <ncogh...@gmail.com>]
> The fact class namespaces are ordered by default now allow us to
> demonstrate the order of multiple target assignments and tuple
> unpacking without staring at generated code:
>
> >>> class AssignmentOrder:
> ...     a = b = c = 0
> ...     d, e, f = range(3)
> ...
> >>> class ReversedAssignmentOrder:
> ...     c = b = a = 0
> ...     f, e, d = range(3)
> ...
> >>> [attr for attr in AssignmentOrder.__dict__ if not attr.startswith("_")]
> ['a', 'b', 'c', 'd', 'e', 'f']
> >>> [attr for attr in ReversedAssignmentOrder.__dict__ if not 
> >>> attr.startswith("_")]
> ['c', 'b', 'a', 'f', 'e', 'd']
>
> So that's a situation where "name = alias = value" could end up
> matching "alias := name := value"

Cool!  So this is really a killer-strong argument for getting rid of
classes - way overdue, too ;-)


> (Even in earlier versions, you can illustrate the same assignment
> ordering behaviour with the enum module, and there it makes even more
> of a difference, as it affects which name binding is considered the
> canonical name, and which are considered aliases).

So if binding expressions can be chained, they'll need to ape
"left-to-right" binding order.

Or they can't be allowed to chain to begin with.

Either way would be fine by me.
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to