Beginner's assignment question

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Sun Mar 2 05:49:41 EST 2008


En Sun, 02 Mar 2008 08:25:49 -0200, Schizoid Man <schiz at lon.don> escribi�:

> Lorenzo Gatti wrote:
>> On Mar 1, 3:39 pm, Schizoid Man <sc... at lon.don> wrote:
>>> As in variable assignment, not homework assignment! :)
>>>
>>> I understand the first line but not the second of the following code:
>>>
>>> a, b = 0, 1
>>> a, b = b, a + b
>>>
>>> In the first line a is assigned 0 and b is assigned 1 simultaneously.
>>>
>>> However what is the sequence of operation in the second statement? I;m
>>> confused due to the inter-dependence of the variables.
>>
>> The expressions of the right of the assignment operator are evaluated
>> before assigning any new values, to the destinations on the left side
>> of the assignment operator.
>> So substitutig the old values of a and b the second assignment means
>>
>> a, b = 0, 0 + 1
>>
>> Simplifying the Python Reference Manual ("6.3 Assignment Statements")
>> a little :
>>
>> assignment_stmt ::= target_list "="+ expression_list
>>
>> 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.
>>
>> [...]
>>
>> WARNING: Although the definition of assignment implies that overlaps
>> between the left-hand side and the right-hand side are `safe' (for
>> example "a, b = b, a" swaps two variables), overlaps within the
>> collection of assigned-to variables are not safe! For instance, the
>> following program prints "[0, 2]":
>>
>> x = [0, 1]
>> i = 0
>> i, x[i] = 1, 2
>> print x
>>
>> Lorenzo Gatti
>
> Thank you for the explanation. I guess my question can be simplified as:
>
> First step: a, b = 0, 1
> No problem here as a and b are assigned values.
>
> Second step: a, b = b, a + b
>
> Now my question is does b become a + b after a becomes 1 or while a
> stays at 0?
>
> As the assignment occurs simultaneously I suppose the answer is while a
> stays at 0.

Read the previous response carefully and you'll answer your question. The  
right hand side is EVALUATED in full before values are assignated to the  
left hand side. Evaluating b, a+b results in 1, 1. The, those values are  
assigned to a, b.

-- 
Gabriel Genellina




More information about the Python-list mailing list