Python赋值运算符?

时间:2018-01-07 23:05:05

标签: python python-3.x

我有这两个程序,这两个值的分配有什么不同,它们打印不同的输出。

>>> 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, 阿伦

1 个答案:

答案 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'