众所周知,Python并不是一门执行效率高的语言。此外,循环在任何语言中都是非常耗时的操作。如果任何一个简单的单步操作都需要花费1个单位的时间,如果这个操作被重复数万次,所花费的时间最终会增加数万倍。while和for是Python中实现循环常用的两个关键字,它们的运行效率其实是有差距的。例如下面的测试代码:importtimeitdefwhile_loop(n=100_000_000):i=0s=0whieiwhileloop4.718853999860585#=>forloop3.211570399813354这是一个简单的求和运算,计算从1到n的所有自然数的和。可以看到for循环比while快了1.5秒。区别主要在于两者的机理。在每个循环中,while实际上比for多执行两个操作:边界检查和变量i的增量。也就是说,每次执行循环时,while都会进行边界检查(whileiwhileloop4.718853999860585#=>forloop3.211570399813354#=>forloopwithincrement4.602369500091299#=>forloopwithtest4.18337869993411可见增加边界检查和自增操作对for循环的执行效率影响很大。前面说过,Python的底层解释器和内置函数都是用C语言实现的。C语言的执行效率远高于Python。对于上述算术差级数求和的操作,借助于Python内置的sum函数,执行效率可以大大高于for或while循环。importtimeitdefwhile_loop(n=100_000_000):i=0s=0whilewhileloop4.718853999860585#=>forloop3.211570399813354#=>sumrange0.8658821999561042可以看到,使用内置的After函数sum代替了循环,代码的执行效率提高了一倍,内置函数sum的累加操作实际上是一个循环,只不过是C语言实现的,而for循环中的求和操作是实现的纯Python代码s+=i.C>Python展开你的思维我们小时候都听过高斯巧妙地计算1到100的和的故事,1…100的和等于(1+100)*50.这种计算方法也适用于to以上求和运算。importtimeitdefwhile_loop(n=100_000_000):i=0s=0whilewhileloop4.718853999860585#=>forloop3.211570399813354#=>sumrange0.8658821999561042#=>mathsum2.400018274784088e-06是sum2.4e-6最后执行的时间,缩短了一百万倍。这里的思路是,既然循环效率低下,那么一段代码要重复上亿次。干脆不要直接循环,把上亿次的循环操作变成一个——通过数学公式一步步运算,效率自然得到前所未有的提升。最终结论(ab它的谜语):实现循环的最快方法------就是没有循环。对于Python,尽可能使用内置函数,以尽量减少循环中的纯Python代码。