代码性能分析

代码性能优化

优化是对代码进行等价变换,使得变换后的代码运行结果与变换前的代码运行结果相同,但执行速度加快或存储开销减少。

  • 代码性能优化是一门复杂的学问。
  • 根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗80% 的工作量。
  • 在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率
  • 以提高程序的全局效率为主,提高局部效率为辅
  • 在优化程序效率时,应先找出限制效率的“瓶颈”
  • 先优化数据结构和算法,再优化执行代码
  • 时间效率和空间效率可能是对立的,应当分析哪一个因素更重要,再做出适当的折衷
  • 从一开始就要考虑程序性能,不要期待在开发结束后再做一些快速调整
  • 正确的代码要比速度快的代码重要,任何优化都不能破坏代码的正确性

  • 认真选择测试数据,使其能够代表实际的使用状况
  • 永远不要在没有执行前后性能评估的情况下尝试对代码进行优化

性能测试工具

代码链接

Profile是Python语言内置的性能分析工具,它能够有效地描述程序运行的性能状况,提供各种统计数据帮助程序员找出程序中的性能瓶颈。

案例:原因分析

为什么 keys() 函数的调用复杂度过高?

keys(): Return a new view of the dic5onary’s keys(docs.python.org)
  • 原因:每调用一次keys()函数,系统就会生成一个新的字典迭代器,如果这个生成过程重复50万次,…...
  • 优化:使用 in 操作符直接代替keys(),不再每次生成新的迭代器。

案例:优化结果

  • 性能优化的关键是如何发现问题,寻找解决问题的方法。
  • 有效的测试是不可缺少的,通过测试找出真正的瓶颈,并分析优化结果
  • 要避免不必要的优化,避免不成熟的优化,不成熟的优化是错误的来源

Python 代码性能优化

改进算法,选择合适的数据结构

  • 良好的算法对性能起到关键作用,因此性能改进的首要点是对算法改进
  • 算法时间复杂性的排序依次是
  • 对成员的查找访问等操作,字典(dictionary)要比列表(list)更快
  • 集合(set)的并、交、差的操作比列表(list)的迭代要快

循环优化的基本原则:尽量减少循环过程中的计算量,在多重循环的时候,尽量将内层的计算提到上一层。

字符串的优化: Python的字符串对象是不可改变的。字符串连接的使用尽量使用 join() 而不是 +。当对字符串可以使用正则表达式或者内置函数处理时,选择内置函数。

使用列表解析和生成器表达式:列表解析要比在循环中重新构建一个新的list 更为高效,因此可以利用这一特性来提高运行的效率。

原文地址:https://www.cnblogs.com/hanqing/p/5697144.html