列表展开用的最多的是在交换两个变量的数值的时候
y,x = x,y
而在C/C++中的方式是
temp = x
x = y
y = temp
为什么我们在python中交换两个变量不需要设置一个临时变量呢?
答案与python的求值栈有关
我们来看一下上述交换变量的python字节码
import dis
def swap():
x = 1
y = 2
y, x = x, y
print(dis.dis(swap))
结果是
5 0 LOAD_CONST 1 (1)
3 STORE_FAST 0 (x)
6 6 LOAD_CONST 2 (2)
9 STORE_FAST 1 (y)
7 12 LOAD_FAST 0 (x)
15 LOAD_FAST 1 (y)
18 ROT_TWO
19 STORE_FAST 1 (y)
22 STORE_FAST 0 (x)
25 LOAD_CONST 0 (None)
28 RETURN_VALUE
关于python字节码,我会在以后的博文中说明
这里我们看到,在python的求值栈上首先存了x,y的值,然后将栈顶的两个元素互换,在分别装入到y和x中去,这就完成了变量值交换
注意当list的长度大于3的时候就不是用ROT这个指令了