我最近开始查看新指南并选择[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
指南提到了这一点:
- 第一行包含多个赋值:变量
a
和b
同时获取新值0和1.在最后一行再次使用它,演示在任何分配发生之前,首先评估右侧的表达式。右侧表达式从左到右进行评估。
任何人都可以为我更简化这一点吗?
答案 0 :(得分:3)
第一行可以像这样解压缩:
a = 0
b = 1
不幸的是,最后一行并不那么容易,因为值是“解包”同时。在这种情况下,如果要按顺序写出它,则需要一个临时变量:
old_a = a
a = b
b = old_a + b
答案 1 :(得分:0)
证明在任何分配发生之前,右侧的表达式都先被评估
表示首先实现第二个表达式(a+b
),然后将a
与未修改的b
相等,将b
与a+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