提升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生成随机密码或随机字符串的方法
Jul 03 Python
Python性能提升之延迟初始化
Dec 04 Python
详解python3百度指数抓取实例
Dec 12 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
python实现K最近邻算法
Jan 29 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
django之自定义软删除Model的方法
Aug 14 Python
pytorch 自定义数据集加载方法
Aug 18 Python
django之导入并执行自定义的函数模块图解
Apr 01 Python
python 实现波浪滤镜特效
Dec 02 Python
Python中的面向接口编程示例详解
Jan 17 Python
Python实现给PDF添加水印的方法
Jan 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
php获取后台Job管理的实现代码
2011/06/10 PHP
Javascript !!的作用
2008/12/04 Javascript
JQuery 风格的HTML文本转义
2009/07/01 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
使用javascript插入样式
2016/03/14 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
Python跳出循环语句continue与break的区别
2014/08/25 Python
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python常用库推荐
2016/12/04 Python
python Celery定时任务的示例
2018/03/13 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
Python生成器常见问题及解决方案
2020/03/21 Python
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
培训心得体会
2013/12/29 职场文书
大学学风建设方案
2014/05/04 职场文书
法院授权委托书范文
2014/08/02 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
总经理聘用协议书
2015/09/21 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
python+opencv实现视频抽帧示例代码
2021/06/11 Python
Python的property属性详细讲解
2022/04/11 Python
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python