掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费。
追求性能极限是一个有趣的游戏, 而过度优化就会变成嘲弄了。虽然Python授予你与C接口无缝集成的能力, 你必须问自己你花数小时的艰辛优化工作用户是否买帐. 
另一方面, 牺牲代码的可维护性换取几毫秒的提升是否值得,团队中的成员常常会感谢你编写了简洁的代码。

1、使用局部变量
尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存。
Python检索局部变量比检索全局变量快. 这意味着,避免 "global" 关键字.
使用局部变量替换模块名字空间中的变量,例如 ls = os.linesep。一方面可以提高程序性能,局部变量查找速度更快;另一方面可用简短标识符替代冗长的模块变量,提高可读性。

2、减少函数调用次数
      2.1 对象类型判断时,采用isinstance()最优,采用对象类型身份id()次之,采用对象值type()最次。

num = 1print("调用三次函数:",type(num) == type(0) )
print("身份比较:",type(num) is type(0) )
print("调用一次函数:",isinstance(num,(int)) )

2.2 不要在重复操作的内容作为参数放到循环条件中,避免重复运算。

c =[1,2,3]
i = 1
j = 1while i < len(c):print("每次循环都需要重新执行len(c)")i += 1m = len(c)
while j < m:print("len(c)仅执行一次")j += 1

2.3 如需使用模块X中的某个函数或对象Y,应直接使用from X import Y,而不是import X; X.Y。这样在使用Y时,可以减少一次查询(解释器不必首先查找到X模块,然后在X模块的字典中查找Y)。

3、采用映射替代条件查找
映射(比如dict等)的搜索速度远快于条件语句(如if等)。Python中也没有select-case语句。

a = 1
b = 1if a == 1:b = 10
elif a == 2:b = 20
print("if查找:",b)     #结果为10d = {1:10,2:20}
e =d[a]
print("dict查找,性能更优:",e)    # 结果为10

4、直接迭代序列元素
对序列(str、list、tuple等),直接迭代序列元素,比迭代元素的索引速度要更快。

f = [1,2,3]for item in f:print("迭代元素:",item)
for i in range(len(f)):print("迭代索引:",f[i])

5、采用生成器表达式替代列表解析
列表解析(list comprehension),会产生整个列表,对大量数据的迭代会产生负面效应。
而生成器表达式则不会,其不会真正创建列表,而是返回一个生成器,在需要时产生一个值(延迟计算),对内存更加友好。

f = 'File.txt'         #计算文件f名称长度的非空字符个数l1 = sum([len(word) for line in f for word in line.split()])
print("生成器表达式:",l1)
l2 = sum(len(word) for line in f for word in line.split())
print("列表解析:",l2)

6、先编译后调用
使用eval()、exec()函数执行代码时,最好调用代码对象(提前通过compile()函数编译成字节码),而不是直接调用str,可以避免多次执行重复编译过程,提高程序性能。
正则表达式模式匹配也类似,也最好先将正则表达式模式编译成regex对象(通过re.complie()函数),然后再执行比较和匹配。

7、模块编程习惯
模块中的最高级别Python语句(没有缩进的代码)会在模块导入(import)时执行(不论其是否真的必要执行)。因此,应尽量将模块所有的功能代码放到函数中,包括主程序相关的功能代码也可放到main()函数中,主程序本身调用main()函数。
可以在模块的main()函数中书写测试代码。在主程序中,检测name的值,如果为'main'(表示模块是被直接执行),则调用main()函数,进行测试;如果为模块名字(表示模块是被调用),则不进行测试。

【Python】提升Python程序性能的好习惯相关推荐

  1. 【Python】提升Python程序性能的好习惯2

    掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费. 追求性能极限是一个有趣的游戏, 而过度优化就会变成嘲弄了.虽然Python授予你与C接口无缝集成的能力, 你必须问自己你花数 ...

  2. 如何快速提升 Go 程序性能?

    快速提升 Go 程序性能的实用技巧,你值得了解一下. 作者 | Stephen Whitworth 译者 | 弯月,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 我对软件性能的话题十分 ...

  3. go bson转换成json_如何快速提升 Go 程序性能?

    快速提升 Go 程序性能的实用技巧,你值得了解一下. 作者 | Stephen Whitworth 译者 | 弯月,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 我对软件性能的话题十分 ...

  4. 微信小程序开发04 性能优化:借助微信开发者工具提升小程序性能

    你好,我是周俊鹏. 前几节课我们分别从架构层(双线程模型).链路层(授权模型).和应用层(自定义组件)三个角度学习了小程序的技术要点.它们能帮你完成一个微信小程序的基本业务逻辑和交互逻辑. 逻辑的第一 ...

  5. 「技术架构」10个提升应用程序性能的倚天剑和屠龙刀

    提高web应用程序性能比以往任何时候都更加重要.在线经济活动的份额正在增长;超过5%的发达国家的经济现在是在互联网上的(参见参考资料中的互联网统计数据).而我们这个始终在线.高度连接的现代世界意味着用 ...

  6. 利用 PGO 提升 .NET 程序性能

    引子 .NET 6 开始初步引入 PGO.PGO 即 Profile Guided Optimization,通过收集运行时信息来指导 JIT 如何优化代码,相比以前没有 PGO 时可以做更多以前难以 ...

  7. 提升 .NET 程序性能的 一些 原则

    1. 尽量少的抛出异常 throw new System.Exception(.); 抛出异常是严重影响性能的. (a) 对于ASP.NET, Response.Redirect(...) 会抛出 T ...

  8. 哪些模块可用于python性能分析_提升Python程序性能的方法有哪些?看完你就知道啦!...

    掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费.今天就为大家带来七个可以提升python程序性能的好习惯,赶快来学习吧:. 1.使用局部变量 尽量使用局部变量代替全局变量:便 ...

  9. 11个显著提升 ASP.NET 应用程序性能的技巧——第1部分

    2019独角兽企业重金招聘Python工程师标准>>> [编者按]本文出自站外作者 Brij Bhushan Mishra ,Brij 是微软 MVP-ASP.NET/IIS.C# ...

最新文章

  1. 智源唐杰主编的IEEE Transactions on Big Data期刊被SCI收录 | AI日报
  2. zookeeper基础知识整理
  3. JAVA post和get方式请求远程HTTP接口
  4. 14-jQuery补充
  5. git 创建本地仓库、远程仓库,上传项目
  6. DOM操作案例之--全选与反选
  7. 解决 mysql>com.mysql.jdbc.PacketTooBigException: Packet for query is too large (12073681 > 4194304)
  8. Java集合性能分析-疯狂Java讲义
  9. idea2020.3升级lombok不能使用
  10. 赢者通吃自编码器(WTA-AE)
  11. Lightroom Classic 教程,如何在 Lightroom 中使用调整画笔?
  12. PIL与opencv相互转换
  13. python运维和开发实战-高级篇
  14. SSH和SSM的区别
  15. 我的小米智能家居系统
  16. 装机春天时刻,盘点4月高性价比国产SSD
  17. 计算机常用符号对应的英文
  18. java.lang.IllegalAccessException 没有访问权限
  19. 彻底理解Java并发:Java并发工具类
  20. Vue框架中常见的前端UI库

热门文章

  1. linux密文解密工具,Linux之加密解密工具openssl的用法以及自建CA
  2. MySQL 索引底层数据结构实现
  3. RabbitMQ 基本概念与高级特性
  4. java 皮鞋_java反射
  5. kewail node 短信_nodejs短信验证
  6. datagridview 手动添加的行如何进行重载_【厚积薄发】如何规划UI图标图集
  7. QuerWrapper常用方法
  8. 哈希表的大小为何最好是素数
  9. .net core 装了没生效_王者荣耀:辅助装出现惊天bug?辅助光环对自己无效?
  10. css button 四种状态,css中按钮的四种状态