Python不是一种一种执行效率较高的语言(图)

众所周知,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()

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论