if __name__ == '__main__': main() # => while loop 4.718853999860585 # => for loop 3.211570399813354 # => for loop with increment 4.602369500091299 # => for loop with test 4.18337869993411
可以看出,增加的边界检查和自增操作确实大大影响了 for 循环的执行效率。
前面提到过,Python 底层的解释器和内置函数是用 C 语言实现的。而 C 语言的执行效率远大于 Python。
对于上面的求等差数列之和的操作,借助于 Python 内置的 sum 函数,可以获得远大于 for 或 while 循环的执行效率。
import timeit
defwhile_loop(n=100_000_000): i = 0 s = 0 while i s += i i += 1 return s
deffor_loop(n=100_000_000): s = 0 for i in range(n): s += i return s
if __name__ == '__main__': main() # => while loop 4.718853999860585
# => for loop 3.211570399813354 # => sum range 0.8658821999561042 # => math sum 2.400018274784088e-06
最终 math sum 的执行时间约为 2.4e-6,缩短了上百万倍。这里的思路就是,既然循环的效率低,一段代码要重复执行上亿次。
索性直接不要循环,通过数学公式,把上亿次的循环操作变成只有一步操作。效率自然得到了空前的加强。
最后的结论(有点谜语人):
实现循环的最快方式——
——
——就是不用循环
对于 Python 而言,则尽可能地使用内置函数,将循环中的纯 Python 代码降到最低。
参考资料
The Fastest Way to Loop in Python - mCoding (https://youtu.be/Qgevy75co8c)