Beginner's assignment question

castironpi at gmail.com castironpi at gmail.com
Sun Mar 2 12:15:02 CET 2008


On Mar 2, 4:49 am, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
> En Sun, 02 Mar 2008 08:25:49 -0200, Schizoid Man <sc... 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- Hide quoted text -
>
> - Show quoted text -

Another way to think of it is:

a, b= b, a+b

--->

X= b, a+b
a, b= X

where X is a pair (2-tuple, two-element tuple, ordered pair, &c.)



More information about the Python-list mailing list