Python 3000 idea: reversing the order of chained assignments

Steven D'Aprano steve at REMOVE.THIS.cybersource.com.au
Wed Mar 21 18:28:45 EDT 2007


On Wed, 21 Mar 2007 22:53:55 +0100, Marcin Ciura wrote:

> Given
>    class Node(object):
>        pass
> 
>    node = Node()
>    nextnode = Node()
> 
> I tried to refactor the following piece of code
>    node.next = nextnode
>    node = nextnode
> 
> as
>    node = node.next = nextnode
> 
> only to discover that Python performs chained assignments
> backwards compared to other languages, i.e. left-to-right
> instead of right-to-left. From the user's perspective,
> I can't think of any reasonable argument for keeping it
> this way in Python 3000. What is your opinion?

Well, this user's perspective is that if I read from left to right, which
I do, then I expect most operations to also go from left to right, and not
from right to left.

Assignment is one exception to that. If I say "x = y = z" then I expect
that afterwards x and y and z should all have the same value.

>>> x, y, z = 1, 2, 3
>>> x, y, z
(1, 2, 3)
>>> x = y = z
>>> x, y, z
(3, 3, 3)

I certainly wouldn't expect to get (2, 3, 3).



-- 
Steven.




More information about the Python-list mailing list