提升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 相关文章推荐
400多行Python代码实现了一个FTP服务器
May 10 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
Python处理字符串之isspace()方法的使用
May 19 Python
在Python的Django框架中创建和使用模版
Jul 15 Python
如何利用Fabric自动化你的任务
Oct 20 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
Feb 22 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
python 函数内部修改外部变量的方法
Dec 18 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
python3实现常见的排序算法(示例代码)
Jul 04 Python
Python之matplotlib绘制饼图
Apr 13 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图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
javascript字典探测用户名工具
2006/10/05 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
js实现弹窗暗层效果
2017/01/16 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
JS数组方法slice()用法实例分析
2020/01/18 Javascript
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
Tornado 多进程实现分析详解
2018/01/12 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
python实现计算器功能
2019/10/31 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
python如何使用代码运行助手
2020/07/03 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
html5实现滑块功能之type=&quot;range&quot;属性
2020/02/18 HTML / CSS
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
北大自主招生自荐信
2013/10/19 职场文书
中国入世承诺
2014/04/01 职场文书
超市活动计划书
2014/04/24 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
话题作文之成长
2019/12/09 职场文书
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
MySQL创建管理RANGE分区
2022/04/13 MySQL