提升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中的split()函数的使用方法
Apr 07 Python
使用Python中的cookielib模拟登录网站
Apr 09 Python
python定时执行指定函数的方法
May 27 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
python实现用户登录系统
May 21 Python
python利用正则表达式提取字符串
Dec 08 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
Python箱型图处理离群点的例子
Dec 09 Python
PyCharm第一次安装及使用教程
Jan 08 Python
Python如何生成xml文件
Jun 04 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 number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
跟我学Laravel之视图 &amp; Response
2014/10/15 PHP
CentOS安装php v8js教程
2015/02/26 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现的防DDoS脚本
2011/02/08 Python
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
Python二元赋值实用技巧解析
2019/10/25 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
毕业自我鉴定范文
2013/11/06 职场文书
中专生自我鉴定书范文
2013/12/28 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
我的画教学反思
2014/04/28 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
2015年中学元旦晚会活动方案
2014/12/09 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python