我有这两个程序,这两个值的分配有什么不同,它们打印不同的输出。
>>> a=0
>>> b=1
>>> while b<10:
... print(b)
... a=b
... b=a+b
输出: 1 2 4 8 和
>>>a=0
>>> b=1
>>> while b<10:
... print(b)
... a, b = b, a+b
输出:1 1 2 3 五 8
THX, 阿伦
答案 0 :(得分:2)
计算a+b
的顺序会发生变化。
在第一种情况下,a+b
在执行a=b
后计算。
在第二种情况下,a+b
在任何分配发生之前计算。
一般来说,Python中发生的事情是在=
右边的事情在赋值发生之前进行评估。
如果您有点好奇,可以使用dis
查看幕后发生的事情,它会显示字节码:
>>> dis.dis('a, b = b, a+b')
1 0 LOAD_NAME 0 (b) # Push the value of 'b' on top of the stack
2 LOAD_NAME 1 (a) # Push the value of 'a'
4 LOAD_NAME 0 (b) # Push the value of 'b'
6 BINARY_ADD # Compute the sum of the last two values on the stack
# Now the stack contains the value of 'b' and of 'a+b', in this order
8 ROT_TWO # Swap the two values on top of the stack
# Now the stack contains the value of 'a+b' and of 'b', in this order
10 STORE_NAME 1 (a) # Store the value on top of the stack inside 'a'
12 STORE_NAME 0 (b) # Store the value on top of the stack inside 'b'