程序执行的标准流程
Python安装在机器上,它包含一个解释器和支持的库。Python程序开始执行之前不需要预编译和连接,大大缩短开发周期。
字节码编译
当Python运行脚本时,第一步需要将脚本编译成“字节码”,字节码是源代码底层的、与平台无关的表现形式,扩展名为“.py”的脚本源文件编译成扩展名为“.pyc”字节码文件,此过程对程序员是不可见的(即透明的)。如果源文件没有被修改,下一次运行程序时将自动加载.pyc字节码文件。
Python虚拟机(PVM)
编译后的字节码文件被发送到Python虚拟机,PVM解释字节码并运行字节码指令,也就是说PVM是实际运行脚本的组件。由于运行的是字节码而不是像C/C++那样运行二进制代码,所以Python的执行效率比C/C++低。
值得注意的是:在一些需要高执行速度的领域,如:数值计算、动画,通过分离一部分需要优化执行速度的应用。将其转换为编译好的扩展,能够到达想要的运行效果。比如NumPy,一个Python的数值计算扩展。
Python的实现
Python语言主要有3种实现方式(CPython、 Jython、 IronPython)
CPython
CPython是原始的、标准的Python实现方式,从官网(http://www.python.org)下载的Python就是CPython,由ANSI C语言编写而成。CPython的实现方式如上文描述。
Jython
Jython包含了Java类,这些类编译Python源代码、形成Java字节码,这些Java字节码在Java虚拟机(JVM)上运行。因为Python代码被翻译成Java字节码,在运行时看起来就一个真正的Java程序。Jython要比CPython慢而且也不够健壮。
IronPython
设计IronPython的目的:让Python程序可以与windows平台上的.NET框架、Linux的Mono所开发的应用集成。IronPython将上图中后两个方框换成.NET环境的等效执行方式。
执行优化
Psyco实时编译器
Psyco是一个PVM的增强工具,在程序运行时,可以将部分程序的字节码转换成真正的二进制机器代码。因为字节码到机器码的转换与程序运行同时发生,所以Psyco往往被看做是一个即时编译器(JIT)。
Psyco需要单独安装