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