Python variable assigning problems...

Jussi Piitulainen harvesting at is.invalid
Fri Dec 11 13:27:18 EST 2015


ICT Ezy writes:
> On Friday, December 11, 2015 at 8:40:18 AM UTC-8, Ian wrote:
>> 
>> No, it actually happens left to right. "x = y = z = 0" means "assign
>> 0 to x, then assign 0 to y, then assign 0 to z." It doesn't mean
>> "assign 0 to z, then assign z to y, etc." This works:
>> 
>> >>> d = d['foo'] = {}
>> >>> d
>> {'foo': {...}}
>> 
>> This doesn't:
>> 
>> >>> del d
>> >>> d['foo'] = d = {}
>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>> NameError: name 'd' is not defined
>
> Deat Ian,
> Thank you very much your answer, but
> above answer from Robin Koch and your answer is different. What's the
> actually process here? I agree with Robin Koch, but your answer is
> correct. Pl explain differences ?

Python language reference, at 7.2 Assignment statements, says this:

# An assignment statement evaluates the expression list (remember that
# this can be a single expression or a comma-separated list, the latter
# yielding a tuple) and assigns the single resulting object to each of
# the target lists, from left to right.

To simplify a bit, it's talking about a statement of this form:

     target_list = target_list = target_list = expression_list

And it says what Ian said: the value of the expression is assigned to
each target *from left to right*.

<https://docs.python.org/3/reference/simple_stmts.html#assignment-statements>



More information about the Python-list mailing list