可能的重复:
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=1
和b=1
。首先,评估右侧:b,a+b
导致元组(1,2)
。接下来,将右侧分配给左侧,即a
和b
。因此,是的,右侧的评估存储在内存中,然后a
和b
更改为指向这些新值。