docs_Python

Python-02进阶-07代码优化技巧

2020-02-01  本文已影响0人  SuperScfan

代码优化技巧

优化原则

核心技巧

其他技巧

Python 代码性能优化技巧

常用代码优化技巧

检查值是否存在,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语句放在循环外面

这是在很多书本上看到的建议,然而这么做的原因,我并没有找到详尽的解释,我自己总结出来的原因有这么几个:

  1. 如果可以把if放在循环外面,却放在循环里,就增加了很多不必要的判断
  2. 在计算机体系结构层面,if放在循环里容易引起分支预测错误,而分支回退要耗很多指令周期
  3. 在计算机体系结构层面,if放在循环里面会造成控制相关,影响指令并行(隐约记得在计算机体系结构这门课程中学过,然而记不太清了,有时间还是得复习复习相关知识=_=(计算机体系结构:量化研究方法,第三章:指令级并行及其开发))
上一篇 下一篇

猜你喜欢

热点阅读