优化原则
核心技巧
其他技巧
常用代码优化技巧
- sort()优于 sorted.
- 字符串拼接。join 优于字符串相加
- 列表表达式优于列表循环。
- 减少不必要的临时对象
- 应避免在高频函数中使用 import 语句的开销。去除无用 import 语句,延迟 import
- 尽量减少函数调用次数,减少时间复杂度。
- 元组内存优于列表。
检查值是否存在,set 快于列表循环。
1 | from timeit import timeit |
结论:当生成可迭代对象后并且不再进行改变,应该使用 tuple 节省内存;当生成集合用来进行检查某个值是否存在时,应该使用 set 来提高效率。
尽可能将 if 语句放在循环外面
这是在很多书本上看到的建议,然而这么做的原因,我并没有找到详尽的解释,我自己总结出来的原因有这么几个:
- 如果可以把 if 放在循环外面,却放在循环里,就增加了很多不必要的判断
- 在计算机体系结构层面,if 放在循环里容易引起分支预测错误,而分支回退要耗很多指令周期
- 在计算机体系结构层面,if 放在循环里面会造成控制相关,影响指令并行(隐约记得在计算机体系结构这门课程中学过,然而记不太清了,有时间还是得复习复习相关知识=_=(计算机体系结构:量化研究方法,第三章:指令级并行及其开发))