我有这两个程序,这两个值的分配有什么区别,它们打印不同的输出。
>>> a=0
>>> b=1
>>> while b<10:
... print(b)
... a=b
... b=a+b
输出:1248和
>>>a=0
>>> b=1
>>> while b<10:
... print(b)
... a, b = b, a+b
输出:112358
感谢阿伦
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'