Python 哪种方式循环最快,或许颠覆你的认知

news/2024/7/5 4:38:04

image.png
众所周知,Python 不是一种执行效率较高的语言。此外在任何语言中,循环都是一种非常消耗时间的操作。假如任意一种简单的单步操作耗费的时间为 1 个单位,将此操作重复执行上万次,最终耗费的时间也将增长上万倍。

和是 Python 中常用的两种实现循环的关键字,它们的运行效率实际上是有差距的。比如下面的测试代码:

这是一个简单的求和操作,计算从 1 到 n 之间所有自然数的总和。可以看到循环相比要快 1.5 秒。

其中的差距主要在于两者的机制不同。

在每次循环中,实际上比多执行了两步操作:边界检查和变量的自增。即每进行一次循环,while 都会做一次边界检查 ()和自增计算()。这两步操作都是显式的纯 Python 代码。

循环不需要执行边界检查和自增操作,没有增加显式的 Python 代码(纯 Python 代码效率低于底层的 C 代码)。当循环的次数足够多,就出现了明显的效率差距。

可以再增加两个函数,在循环中加上不必要的边界检查和自增计算:

可以看出,增加的边界检查和自增操作确实大大影响了循环的执行效率。

前面提到过,Python 底层的解释器和内置函数是用 C 语言实现的。而 C 语言的执行效率远大于 Python。

对于上面的求等差数列之和的操作,借助于 Python 内置的函数,可以获得远大于或循环的执行效率。

可以看到,使用内置函数替代循环之后,代码的执行效率实现了成倍的增长。

内置函数的累加操作实际上也是一种循环,但它由 C 语言实现,而循环中的求和操作是由纯 Python 代码实现的。C > Python。

再拓展一下思维。小时候都听说过童年高斯巧妙地计算 1 到 100 之和的故事。1…100 之和等于 (1 + 100) * 50。这个计算方法同样可以应用到上面的求和操作中。

最终 math sum 的执行时间约为,缩短了上百万倍。这里的思路就是,既然循环的效率低,一段代码要重复执行上亿次。

索性直接不要循环,通过数学公式,把上亿次的循环操作变成只有一步操作。效率自然得到了空前的加强。

最后的结论(有点谜语人):

实现循环的最快方式——————就是不用循环

对于 Python 而言,则尽可能地使用内置函数,将循环中的纯 Python 代码降到最低。


http://lihuaxi.xjx100.cn/news/272535.html

相关文章

拥抱并行流,提高程序执行速度

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章作者:后青春期的Keatscnblogs.com/keatsCoder/p/12934394.html前言 在 Java7 之前,如果想要并行处理一个集合,我们需要以下几步 1. 手动分成几部分 2. 为每部…

命令行的全文搜索工具--ack

想必大家在命令行环境下工作时候,一定有想要查找当前目录下的源代码文件中的某些字符的需求,这时候如果使用传统方案,你可能需要输入一长串的命令,比如这样: 1. grep -R string dir/ 或者 grep -r -e string direct…

通用权限管理组件使用说明书V3.0 错误校正 感谢自由软件职业者Helper(767870484)...

有时候,真想做个像样的东西出来,但是往往各方面的能力都不够,这么多人,Helper(767870484)仔细认真的阅读了这个帮助手册、并给给于了指正,在这里非常感谢,你的劳动成果已经被通用权限…

51NOD 1773:A国的贸易——题解

http://www.51nod.com/onlineJudge/questionCode.html#!problemId1773 参考1:FWT讲解 https://www.cnblogs.com/RabbitHu/p/9182047.html 参考2:题解 https://www.cnblogs.com/ivorysi/p/9178577.html (令$\oplus$表示异或) 设$dp…

《评人工智能如何走向新阶段》后记(再续18)

由AI科技大本营下载273.人工智能与人脑智能 近年来人工智能取得了巨大进步,受人脑神经元调节机制启发的人工智能新颖算法层出不穷!但人工智能离人脑智能(或称人类智能)还差得很远,而人脑(神经元&#xff0…

2020 Top10 计算机视觉论文总结:论文,代码,解读,还有demo视频!

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达作者丨louisfb01来源丨AI公园编辑丨极市平台尽管今年世界上发生了这么多事情,我们还是有机会看到很多惊人的研究成果。特别是在人工智能更精确的说是计算机视觉领…

Pygame Rect区域位置(图解)

Rect(rectangle)指的是矩形,或者长方形,在 Pygame 中我们使用 Rect() 方法来创建一个指定位置,大小的矩形区域。函数的语法格式如下: rect pygame.Rect(left,top,width,height) Rect 表示的区域必须位于…

springboot集成普罗米修斯

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章Prometheus 是一套开源的系统监控报警框架。它由工作在 SoundCloud 的 员工创建,并在 2015 年正式发布的开源项目。2016 年,Prometheus 正式加入 Cloud Native Computing…