栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么Python对于简单的for循环如此慢?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么Python对于简单的for循环如此慢?

我想我犯错了,因为我知道Python已被许多科学项目使用。

他们大量使用SciPy(NumPy是最重要的组件,但我听说围绕NumPyAPI开发的生态系统更为重要),这些速度 大大_加快了这些项目所需的各种操作。这是您做错的事情:您不是用C编写 _关键
代码。Python对于一般而言的开发非常有用,但是放置适当的扩展模块本身就是至关重要的优化(至少在处理数字时)。
。Python是一种非常糟糕的语言,用于实现紧密的内部循环。

默认的(目前是最受欢迎和广泛支持的)实现是一个简单的字节码解释器。即使是最简单的操作(例如整数除法)也可能需要数百个CPU周期,多个内存访问(常见的类型检查),多个C函数调用等,而不是几个(对于整数,甚至是单个)除法)指令。此外,该语言具有许多抽象设计,这增加了开销。如果使用xrange,循环会在堆上分配9999个对象;如果使用xrange,则会在堆上分配更多的对象

range
(9999* 9999整数减去256 *256左右的高速缓存小整数)。此外,该
xrange
版本还会在每次迭代时调用一个方法来进行扩展-
range
如果未专门优化序列的迭代,则版本也是如此。但是,它仍然需要整个字节码分配,这本身是非常复杂的(当然,与整数除法相比)。

看到什么是JIT会很有趣(我建议使用PyPy而不是Psyco,后者不再积极开发,而且范围也非常有限-
尽管对于这个简单的示例来说,它可能很好用)。经过一小部分的迭代后,它应该会产生一个几乎最佳的机器代码循环,并增加一些保护措施-
简单的整数比较,如果失败,则跳转-
以保持正确性,以防您在该列表中出现字符串。Java可以做同样的事情,只是更快(不必先跟踪),并且只需较少的防护(至少如果使用

int
s)。这就是为什么它要快得多的原因。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/641008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号