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