一个聪明的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用于代码的性能关键部分。


![为什么python中的琐碎循环比C ++中的慢得多?以及如何优化呢?[重复] 为什么python中的琐碎循环比C ++中的慢得多?以及如何优化呢?[重复]](http://www.mshxw.com/aiimages/31/661650.png)
