脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 提升Python程序性能的七个习惯

提升Python程序性能的七个习惯

2022-10-10 19:49Python爱好者社区 Python

掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费。

提升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()函数,进行测试;如果为模块名字(表示模块是被调用),则不进行测试。

原文地址:https://mp.weixin.qq.com/s/qiHeNrdJ4z6UpXPMybtiLA

延伸 · 阅读

精彩推荐
  • Pythonpython eval()函数使用详情

    python eval()函数使用详情

    这篇文章主要来来聊聊python eval()函数使用方法本文将以python eval()函数使用方法来展开内容,需要的小伙伴可以参考以下文章的内容,希望对你有所帮助...

    Python 学习者3532022-02-13
  • PythonOpenCV-Python 对图像的基本操作代码

    OpenCV-Python 对图像的基本操作代码

    这篇文章主要介绍了OpenCV-Python 对图像的基本操作,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可...

    WSKH09298702022-03-08
  • Pythonpython用BeautifulSoup库简单爬虫实例分析

    python用BeautifulSoup库简单爬虫实例分析

    文章给大家分享了关于python爬虫的相关实例以及相关代码,有兴趣的朋友们参考下。...

    segmentfault13262021-03-23
  • Python将tensorflow模型打包成PB文件及PB文件读取方式

    将tensorflow模型打包成PB文件及PB文件读取方式

    今天小编就为大家分享一篇将tensorflow模型打包成PB文件及PB文件读取方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    zchenack21822020-06-16
  • PythonPython利用matplotlib模块数据可视化绘制3D图

    Python利用matplotlib模块数据可视化绘制3D图

    matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图,下面这篇文章主要给大家介绍了关于Python利用matplotlib模块数...

    嫑叫我5852022-09-19
  • Python如何通过python检查文件是否被占用

    如何通过python检查文件是否被占用

    这篇文章主要介绍了如何通过python检查文件是否被占用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    storm_spirit7632021-08-15
  • PythonDjango基础知识与基本应用入门教程

    Django基础知识与基本应用入门教程

    这篇文章主要介绍了Django基础知识与基本应用,结合实例形式分析了Django框架基本的项目创建、启动、查看版本等操作,并结合一个简单的blog应用示例分析了...

    铠甲巨人5342021-03-19
  • Pythonpython 深入了解GIL锁详细

    python 深入了解GIL锁详细

    这篇文章主要介绍了python 深入了解GIL锁,python的使用者都知道Cpython解释器有一个弊端,真正执行时同一时间只会有一个线程执行,这是由于设计者当初设...

    Silent丿丶黑羽7952022-02-18