难以理解3.2。迈向编程的第一步

时间:2014-10-28 21:50:17

标签: python

我最近开始查看新指南并选择[python.org教程](https://docs.python.org/2/tutorial/。但是,在section 3.2中,我无法理解这段代码:

a, b = 0, 1
while b < 10:
    print b
    a, b = b, a+b

给我输出

1
1
2
3
5
8

指南提到了这一点:

  
      
  • 第一行包含多个赋值:变量ab同时获取新值0和1.在最后一行再次使用它,演示在任何分配发生之前,首先评估右侧的表达式。右侧表达式从左到右进行评估。
  •   

任何人都可以为我更简化这一点吗?

2 个答案:

答案 0 :(得分:3)

第一行可以像这样解压缩:

a = 0
b = 1

不幸的是,最后一行并不那么容易,因为值是“解包”同时。在这种情况下,如果要按顺序写出它,则需要一个临时变量:

old_a = a
a = b
b = old_a + b

答案 1 :(得分:0)

  

证明在任何分配发生之前,右侧的表达式都先被评估

表示首先实现第二个表达式(a+b),然后将a与未修改的b相等,将ba+b相等。

看起来像那样

step1 => a + b
step2 => a = b
         b = step1


            step2       step1     b
loop    |            |        |  
        |            |        | 
        |  a     b   |   mod  |  output
1       |  0     1   |    -   |   >> 1
2       |  1     1   |   0+1  |   >> 1
3       |  1     2   |   1+1  |   >> 2      
4       |  2     3   |   1+2  |   >> 3
5       |  3     5   |   2+3  |   >> 5
6       |  5     8   |   3+5  |   >> 8