深入理解python的列表展开(list unpacking)
2014-12-15 17:10
260 查看
列表展开用的最多的是在交换两个变量的数值的时候
而在C/C++中的方式是
为什么我们在python中交换两个变量不需要设置一个临时变量呢?
答案与python的求值栈有关
我们来看一下上述交换变量的python字节码
结果是
关于python字节码,我会在以后的博文中说明
这里我们看到,在python的求值栈上首先存了x,y的值,然后将栈顶的两个元素互换,在分别装入到y和x中去,这就完成了变量值交换
注意当list的长度大于3的时候就不是用ROT这个指令了
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这个指令了
相关文章推荐
- 深入理解python的生成器表达式和列表解析
- Python 深入理解
- <深入理解Python中文版>读书笔记
- Python学习22:列表解析(列表综合深入)
- 深入理解python之self
- 深入理解Python的包机制
- Python天天美味(25) - 深入理解yield
- Python 深入理解yield
- Python中的魔法方法深入理解
- 深入理解python之self
- Android Mms之:深入理解对话列表管理
- 深入理解python之self
- Python天天美味(25) - 深入理解yield
- Python单元测试——深入理解unittest
- 深入理解python之self
- Python天天美味(25) - 深入理解yield
- python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域
- Python3基础(六) 深入list列表
- Python 深入理解yield