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