提升Python程序性能的7个习惯


Posted in Python onApril 14, 2019

掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费。

1、使用局部变量

尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存。

使用局部变量替换模块名字空间中的变量,例如 ls = os.linesep。一方面可以提高程序性能,局部变量查找速度更快;另一方面可用简短标识符替代冗长的模块变量,提高可读性。

2、减少函数调用次数

对象类型判断时,采用isinstance()最优,采用对象类型身份(id())次之,采用对象值(type())比较最次。

判断变量num是否为整数类型

type(num) == type(
0
) 
#调用三次函数
type(num) 
is
 type(
0
) 
#身份比较
isinstance(num,(
int
)) 
#调用一次函数

不要在重复操作的内容作为参数放到循环条件中,避免重复运算。

#每次循环都需要重新执行len(a)
while
 i < len(a):
 statement
#len(a)仅执行一次
m = len(a)
while
 i < m:
 statement

如需使用模块X中的某个函数或对象Y,应直接使用from X import Y,而不是import X; X.Y。这样在使用Y时,可以减少一次查询(解释器不必首先查找到X模块,然后在X模块的字典中查找Y)。

3、采用映射替代条件查找

映射(比如dict等)的搜索速度远快于条件语句(如if等)。Python中也没有select-case语句。

#if查找
if
 a == 
1
:
 b = 
10
elif
 a == 
2
:
 b = 
20
...
#dict查找,性能更优
d = {
1
:
10
,
2
:
20
,...}
b = d[a]

4、直接迭代序列元素

对序列(str、list、tuple等),直接迭代序列元素,比迭代元素的索引速度要更快。

a = [
1
,
2
,
3
]
#迭代元素
for
 item 
in
 a:
print
(item)
#迭代索引
for
 i 
in
 range(len(a)):
print
(a[i])

5、采用生成器表达式替代列表解析

列表解析(list comprehension),会产生整个列表,对大量数据的迭代会产生负面效应。

而生成器表达式则不会,其不会真正创建列表,而是返回一个生成器,在需要时产生一个值(延迟计算),对内存更加友好。

#计算文件f的非空字符个数
#生成器表达式
l = sum([len(word) 
for
 line 
in
 f 
for
 word 
in
 line.split()])
#列表解析
l = sum(len(word) 
for
 line 
in
 f 
for
 word 
in
 line.split())

6、先编译后调用

使用eval()、exec()函数执行代码时,最好调用代码对象(提前通过compile()函数编译成字节码),而不是直接调用str,可以避免多次执行重复编译过程,提高程序性能。

正则表达式模式匹配也类似,也最好先将正则表达式模式编译成regex对象(通过re.complie()函数),然后再执行比较和匹配。

7、模块编程习惯

模块中的最高级别Python语句(没有缩进的代码)会在模块导入(import)时执行(不论其是否真的必要执行)。因此,应尽量将模块所有的功能代码放到函数中,包括主程序相关的功能代码也可放到main()函数中,主程序本身调用main()函数。

可以在模块的main()函数中书写测试代码。在主程序中,检测name的值,如果为'main'(表示模块是被直接执行),则调用main()函数,进行测试;如果为模块名字(表示模块是被调用),则不进行测试。

总结

以上所述是小编给大家介绍的提升Python程序性能的7个习惯,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
python实现linux下使用xcopy的方法
Jun 28 Python
python实现网站的模拟登录
Jan 04 Python
浅析Python中的多条件排序实现
Jun 07 Python
使用pyecharts在jupyter notebook上绘图
Apr 23 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
python实现K最近邻算法
Jan 29 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
python实现AES加密与解密
Mar 28 Python
python判断无向图环是否存在的示例
Nov 22 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
解决paramiko执行命令超时的问题
Apr 16 Python
Python根据当前日期取去年同星期日期
Apr 14 #Python
Python实现的微信支付方式总结【三种方式】
Apr 13 #Python
Python实现合并excel表格的方法分析
Apr 13 #Python
Python Image模块基本图像处理操作小结
Apr 13 #Python
python使用pymongo操作mongo的完整步骤
Apr 13 #Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 #Python
python mac下安装虚拟环境的图文教程
Apr 12 #Python
You might like
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
常用PHP封装分页工具类
2017/01/14 PHP
php报错502badgateway解决方法
2019/10/11 PHP
JS event使用方法详解
2008/04/28 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Python 性能优化技巧总结
2016/11/01 Python
Python进阶篇之字典操作总结
2016/11/16 Python
Python 登录网站详解及实例
2017/04/11 Python
深入浅出学习python装饰器
2017/09/29 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
python获取栅格点和面值的实现
2020/03/10 Python
Python-split()函数实例用法讲解
2020/12/18 Python
干部行政关系介绍信
2014/01/17 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
廉洁自律承诺书
2014/03/27 职场文书
师德师风自我评价范文
2014/09/11 职场文书
个人向公司借款协议书
2014/10/09 职场文书
银行贷款委托书范本
2014/10/11 职场文书
三八节祝酒词
2015/08/11 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
数据库连接池
2021/04/06 MySQL
Python 如何解决稀疏矩阵运算
2021/05/26 Python