![为什么python中的琐碎循环比C ++中的慢得多?以及如何优化呢?[重复],第1张 为什么python中的琐碎循环比C ++中的慢得多?以及如何优化呢?[重复],第1张](/aiimages/%E4%B8%BA%E4%BB%80%E4%B9%88python%E4%B8%AD%E7%9A%84%E7%90%90%E7%A2%8E%E5%BE%AA%E7%8E%AF%E6%AF%94C+%2B%2B%E4%B8%AD%E7%9A%84%E6%85%A2%E5%BE%97%E5%A4%9A%EF%BC%9F%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E4%BC%98%E5%8C%96%E5%91%A2%EF%BC%9F%5B%E9%87%8D%E5%A4%8D%5D.png)
一个聪明的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用于代码的性能关键部分。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)