Python的评估顺序尚不清楚



可能的重复:
Python中的多个分配

自从我们从c开始时就已经学到了正确的事,这是在一个线程中工作时在计算机上,所有操作都会一次进行。

我对Python 3语言有疑问。我已经看到使用表达式交换变量值的代码:

a,b = b,a

或用于fibonacci系列的使用:

a,b = b,a+b

这些如何工作?但是他们确实有效:o

Python系统在内部是否为此创建一些临时变量?分配顺序是什么,以便有效地给出正确的结果?

问候,Nikhil

在高级别,您正在创建两个元组,左侧和右侧,并将右侧分配给左侧,这将变量一一将变量更改为对方。Python是一种更高级别的语言,因此与c。

这样的语言相比,这种抽象有更多的抽象。

在低级别,您可以通过使用dis模块清楚地看到正在发生的事情,该模块可以向您显示python bytecode的函数:

>>> import dis
>>> def test(x, y):
...     x, y = y, x
... 
>>> dis.dis(test)
  2           0 LOAD_FAST                1 (y)
              3 LOAD_FAST                0 (x)
              6 ROT_TWO             
              7 STORE_FAST               0 (x)
             10 STORE_FAST               1 (y)
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE     

发生的事情是使用ROT_TWO交换堆栈上的项目的顺序,这是一种非常有效的方法。

编写a, b时,创建tuple

>>> 1, 2
(1, 2)

所以,评估顺序没有什么特别的。

来自fibonacci示例,带有a=1b=1。首先,评估右侧:b,a+b导致元组(1,2)。接下来,将右侧分配给左侧,即ab。因此,是的,右侧的评估存储在内存中,然后ab更改为指向这些新值。

最新更新