improve your python code(3)
来源:互联网 发布:服装店收银软件破解版 编辑:程序博客网 时间:2024/05/25 08:13
数据交换时候,不推荐使用中间变量。
下面的代码中,swap1的运行速度要比swap2更快。
我们用dis模块来看一下两种代码的指令流程
#!/usr/bin/env python# encoding: utf-8"""@python version: ??@author: XiangguoSun@contact: sunxiangguodut@qq.com@site: http://blog.csdn.net/github_36326955@software: PyCharm@file: suggest3.py@time: 5/2/2017 4:02 PM"""import disdef swap1(): x = 1 y = 2 x, y = y, x return x, ydef swap2(): x = 1 y = 2 temp = x x = y y = temp return x, yprint(dis.dis(swap1))print(dis.dis(swap2))
左边那一列数字是原始源代码的行号。第二列是字节码的偏移量:LOAD_CONST在第0行,STORE_FAST在第3行,以此类推。中间那列是字节的名字。它们是为程序员所准备的——解释器是完全不需要的。
最后两列告诉我们一些关于指令参数(如果有的话)的细节。第四列是参数本身。它表示一个指向代码对象其它属性的索引。在这个例子中,LOAD_CONST的参数指向列表co_consts,STORE_FAST的参数指向co_varnames。
常见指令:
LOAD_CONST 将co_consts中对应的值压栈
STORE_DEREF 解引用,设置栈中的变量值
LOAD_CLOSURE 将freevars中的对象压栈
BUILD_TUPLE 用栈帧中的元素创建元组,并压栈
BUILD_CLOSURE 创建PyFunction对象,并设置其中的f_closure域
STORE_FAST 将栈中的一个元素设置到对应的本地变量域中
RETURN_VALUE return,并且设置退出原因WHY_RETURN
上面两个程序最大的差异在于第一个用了指令ROT_TWO,交换栈顶元素。比LOAD_FAST+STORE_FAST指令更快。
0 0
- improve your python code(3)
- improve your python code(1)
- improve your python code(2)
- improve your python code(4)
- improve your python code(5)
- improve your python code(6)
- improve your python code(7)
- improve your python code(8)
- improve your python code(9)
- improve your python code(10)
- improve your python code(11)
- improve your python code(12)
- improve your python code(13)
- Become a Better Developer: 3 Ways Writing Will Expand Your Mind, Improve Your Code and Grow Your Car
- Improve Your Python: 'yield' and Generators Explained
- Improve Your Python: 'yield' and Generators Explained
- How to improve quality and syntax of your Android code
- Teaching course1 : How to improve your code quality
- 基础day11——fragment
- 安装软件时提示丢失MSVCR.dll,vc++运行库的问题
- LeetCode 11. Container With Most Water 对撞指针
- 新路程------ 一个字符驱动(ioctl)
- H5页面仿原生列表会话左滑显示删除键/编辑键--局部滑动
- improve your python code(3)
- c\c++学习 No.4 AI贪吃蛇(一)
- Hexo+Github pages 创建一个属于自己的博客
- malloc/free与new/delete的区别
- 118. Pascal's Triangle 杨辉三角
- 560. Subarray Sum Equals K
- JDBC
- eclipse项目添加到tomcat 没有.class文件
- 强制类型转换