正如我们从一开始就在计算机上开始使用C开始学习的那样,所有操作都是逐个进行的。
我对Python 3语言有疑问。我见过使用表达式交换变量值的代码:
a,b = b,a
或者使用Fibonacci系列:
a,b = b,a+b
这些如何运作?但他们确实有效:O
Python系统内部是否为这些创建了一些临时变量?分配的顺序是什么,以便有效地给出正确的结果?
此致 NIKHIL
答案 0 :(得分: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
来交换堆栈中项目的顺序,这是一种非常有效的方法。
答案 1 :(得分:0)
当您撰写a, b
时,您需要创建tuple
。
>>> 1, 2
(1, 2)
因此,评估顺序没有什么特别之处。
答案 2 :(得分:0)
来自斐波纳契示例a=1
和b=1
。首先,评估右侧:b,a+b
,得到元组(1,2)
。接下来,右侧分配到左侧,即a
和b
。所以是的,右边的评估存储在内存中,然后a
和b
更改为指向这些新值。