On Mar 2, 4:49 am, "Gabriel Genellina" <[EMAIL PROTECTED]> wrote: > En Sun, 02 Mar 2008 08:25:49 -0200, Schizoid Man <[EMAIL PROTECTED]> escribi�: > > > > > > > Lorenzo Gatti wrote: > >> On Mar 1, 3:39 pm, Schizoid Man <[EMAIL PROTECTED]> 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.) -- http://mail.python.org/mailman/listinfo/python-list