Python 性能优化
最近将之前用 Python 写的一个工具进行了性能优化,把一些心得写下来。
原则
单元测试 在进行性能优化的过程中,我充分体会到了进行单元测试的重要性。如果没有那些测试用例,那么对代码进行修改后,就很难保证整个代码的语义 没有发生变化,所以,切记:多写测试用例。
不要过早优化 在项目进行的初期,不必过于关注性能优化问题。原因在于,如果早期进行性能优化,那么可能会降低可读性,并且可能我们认为可以起到作用 的优化措施,根本不是性能瓶颈。事实往往是只有一小部分代码,占用了大部分时间。所以我们早期可以关注代码的可读性,可扩展性,等问题。 后期如果真的需要进行性能优化,再寻找性能瓶颈,然后集中力量对瓶颈处进行优化。
当然,不要过早优化,并不是说一点也不需要关心性能问题。早期设计时,我们就应该思考,对同一块数据,哪些操作使用的比较多,选用哪 种数据结构比较合适。
技巧
使用新的解释器 官方提供的解释器是 CPython,而在换用 PyPy 后,同样的代码几乎可以透明地提升数倍的性能。
set 与 list 仔细思考需要使用 set 还是 list,如果有大量的
x in foo
这样的操作,应该选用 set 而不是 listcProfile 官方的库中提供了 cProfile,帮助我们分析每个函数消耗的时间,便于我们找到性能瓶颈。