if name == ‘main’:
main()
# => while loop 4.718853999860585
# => for loop 3.211570399813354
这是一个简单的求和操作,计算从 1 到 n 之间所有自然数的总和。可以看到 for
循环相比 while
要快 1.5 秒。
其中的差距主要在于两者的机制不同。
在每次循环中,while
实际上比 for
多执行了两步操作:边界检查和变量 i
的自增。即每进行一次循环,while 都会做一次边界检查 (while i < n
)和自增计算(i +=1
)。这两步操作都是显式的纯 Python 代码。
for
循环不需要执行边界检查和自增操作,没有增加显式的 Python 代码(纯 Python 代码效率低于底层的 C 代码)。当循环的次数足够多,就出现了明显的效率差距。
可以再增加两个函数,在 for
循环中加上不必要的边界检查和自增计算:
import timeit
def while_loop(n=100_000_000):
i = 0
s = 0
while i < n:
s += i
i += 1
return s
def for_loop(n