Python 赋值运算符



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

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

相关内容

  • 没有找到相关文章

最新更新