为什么python中的琐碎循环比C ++中的慢得多?以及如何优化呢?[重复]

为什么python中的琐碎循环比C ++中的慢得多?以及如何优化呢?[重复],第1张

为什么python中的琐碎循环比C ++中的慢得多?以及如何优化呢?[重复]

一个聪明的C编译器能够通过识别,在年底,可能优化循环客场

a
始终为1
Python不能这样做,因为当循环访问
xrange
,需要调用
__next__
上的
xrange
对象,直到它引发
StopIteration
。python
__next__
在调用它之前不知道是否会有副作用,因此无法优化循环。本段的要点是,与C编译器相比,优化Python“编译器”是非常困难的,因为python是一种动态语言,需要编译器知道对象在某些情况下的行为。在C中,这要容易得多,因为C提前知道每个对象的类型。

当然,除了编译器,python还需要做更多的工作。在中

C
,您正在使用 硬件说明中 支持的 *** 作来处理基本类型。在python中,解释器在
软件中
一次解释一行字节码。显然,这将花费比机器级指令更长的时间。数据模型(例如
__next__
,一遍又一遍地调用)也可以导致很多C不需要做的函数调用。当然,python做了这些工作,使其比您在编译语言中拥有的灵活性更高。

加快python代码速度的典型方法是使用库或内在函数,这些库或内在函数为低级编译代码提供高级接口。

scipy
并且
numpy
是此类库的出色示例。您可以查看使用的其他内容,
pypy
其中包括JIT编译器-
您可能无法达到本机速度,但是它可能会击败Cpython(最常见的实现),或者使用Cpython-API在C /
fortran中编写扩展,cython或f2py用于代码的性能关键部分。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5663607.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存