0

可能重复:
Python 中的多重赋值

正如我们从 C 开始学习到的那样,在计算机上同时在一个线程中工作时,所有操作都会一个接一个地发生。

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

a,b = b,a

或者对于斐波那契数列使用:

a,b = b,a+b

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

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

问候, 尼基尔

4

3 回答 3

4

在较高级别上,您正在创建两个元组,左侧和右侧,并将右侧分配给左侧,这将变量一一更改为它们的对立面。Python 是一种高级语言,因此与 C 等语言相比,有更多这样的抽象。

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

>>> 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交换堆栈中项目的顺序,这是一种非常有效的方法。

于 2012-12-18T11:21:51.407 回答
0

当你写作时a, b,你创造tuple

>>> 1, 2
(1, 2)

因此,评估顺序没有什么特别之处。

于 2012-12-18T11:19:09.740 回答
0

From the Fibonacci example with a=1 and b=1. First, the right hand side is evaluated: b,a+b resulting in the tuple (1,2). Next, the right hand side is assigned to the left hand side, namely a and b. So yes, the evaluation on the right is stored in memory, and then a and b changed to point to these new values.

于 2012-12-18T11:23:25.653 回答