提升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列表与元组详解实例
Nov 01 Python
Python判断Abundant Number的方法
Jun 15 Python
Python实现嵌套列表去重方法示例
Dec 28 Python
python实现自动登录后台管理系统
Oct 18 Python
Python中修改字符串的四种方法
Nov 02 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
python中列表的含义及用法
May 26 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Python调用C/C++的方法解析
Aug 05 Python
Python实现扫码工具的示例代码
Oct 09 Python
Python常用GUI框架原理解析汇总
Dec 07 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
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
Javascript基础教程之变量
2015/01/18 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
Node.js的特点详解
2017/02/03 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
Javascript的this详解
2019/03/23 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
JavaScript 实现继承的几种方式
2021/02/19 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python实现的简单计算器功能详解
2018/08/25 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
详解Python self 参数
2019/08/30 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
python关于倒排列的知识点总结
2020/10/13 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
全球虚拟主机商:HostGator
2017/02/06 全球购物
模具专业推荐信
2013/10/30 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
群众路线党课主持词
2014/04/01 职场文书
国际金融专业自荐信
2014/07/05 职场文书
委托书的写法
2014/08/30 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
宾馆客房管理制度
2015/08/06 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang
Python学习之os包使用教程详解
2022/03/21 Python
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js