提升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 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
利用Python绘制数据的瀑布图的教程
Apr 07 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
Oct 13 Python
举例讲解Python面向对象编程中类的继承
Jun 17 Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 Python
Python实现KNN邻近算法
Jan 28 Python
python中从str中提取元素到list以及将list转换为str的方法
Jun 26 Python
Pandas Shift函数的基础入门学习笔记
Nov 16 Python
详解Python3注释知识点
Feb 19 Python
python实现最大优先队列
Aug 29 Python
python实现宿舍管理系统
Nov 22 Python
使用pipenv管理python虚拟环境的全过程
Sep 25 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
对javascript和select部件的结合运用
2006/10/09 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
jQuery 性能优化手册 推荐
2010/02/23 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
python程序封装为win32服务的方法
2021/03/07 Python
Python中按值来获取指定的键
2019/03/04 Python
pybind11在Windows下的使用教程
2019/07/04 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
IBatis持久层技术
2016/07/18 面试题
手机促销活动方案
2014/02/05 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
廉政教育的心得体会
2014/09/01 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
十八大观后感
2015/06/12 职场文书
听证会主持词
2015/07/03 职场文书