众所周知,Python并不是一门执行效率很高的语言。此外,循环在任何语言中都是非常耗时的操作。如果任何一个简单的单步操作需要1个单位时间,如果这个操作重复数万次,最终的时间将增加数万次。
和是Python中实现循环的两个常用关键字,实际上它们的运行效率是有差距的。例如下面的测试代码:
这是一个简单的求和运算,计算从 1 到 n 的所有自然数之和。您可以看到循环快了 1.5 秒。
区别主要在于两者的机制。
在每个循环中,实际上还执行了两个步骤:边界检查和变量的自动递增。即每次循环执行时,while都会做一次边界检查()和一次自增计算()。这两个步骤都是显式的纯 Python 代码。
循环不需要执行边界检查和自增操作,也没有添加显式 Python 代码(纯 Python 代码效率低于低级 C 代码)。当循环的数量足够大时,就会出现明显的效率差距。
可以添加另外两个函数,向循环添加不必要的边界检查和自动增量计算:
可以看出,增加的边界检查和自增操作确实极大地影响了循环的执行效率。
如前所述,Python 的底层解释器和内置函数都是用 C 语言实现的。C语言的执行效率远高于Python。
对于上述计算等差数列之和的操作,借助 Python 内置函数,可以获得远大于 or 循环的执行效率。
可以看到,使用内置函数替换循环后,代码的执行效率提高了一倍。
内置函数的累加运算其实是一种循环,只不过是用C语言实现的,循环中的求和运算是用纯Python代码实现的。C > Python。
扩展你的思维。小时候听过小时候高斯巧妙地计算 1 到 100 之和的故事。1…100 之和等于 (1 + 100) * 50。这种计算方法也可以应用于上面的求和运算。
最终数学和的执行时间大约缩短了 100 万倍。这里的想法是c语言中查找效率最高的是,由于循环的效率低,一段代码需要重复上亿次。
干脆不循环,用数学公式把上亿次循环操作变成一步。效率自然得到了前所未有的提升。
最终结论(有点谜的人):
实现循环的最快方法——————是没有循环
对于 Python,尽可能使用内置函数,将循环中的纯 Python 代码保持在最低限度。
当然c语言中查找效率最高的是,在某些情况下,内置函数并不是最快的。例如,当创建一个列表时,按字面书写它会更快。
参考
Python 中最快的循环方式 – mCoding()
请登录后发表评论
注册
社交帐号登录