您的位置:首页 > 编程语言 > Python开发

深入理解python的列表展开(list unpacking)

2014-12-15 17:10 260 查看
列表展开用的最多的是在交换两个变量的数值的时候

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这个指令了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: