● 字节码编译
当程序执行时,Python内部(对大多数用户是完全隐藏的)会将源代码(文件中的语句)编译成所谓字节码的形式。
Python通过把每一条源语句分解为单一步骤来将这些源语句翻译成一组字节码指令。这些字节码可以提高执行速度:比起文本文件中原始的源代码语句,字节码的运行速度要快的很多。
如果Python进程在机器上拥有写入权限,那么它将把程序的字节码保存为一个以.pyc为扩展名的文件(“ .pyc ”是编译过的“.py ”源代码)。当程序运行之后,可以在源代码的附近(同一个目录下)看到这些文件。
Python这样保存字节码是作为一种速度的优化。下一次运行程序的时候,如果上次保存字节码之后没有修改过源代码的话,Python将会加载.pyc文件并跳过编译这个步骤。当Python必须重编译时,它会自动检查源文件和字节码文件的时间戳:如果你又保存了源代码,下次程序运行时,字节码将自动重新创建。
如果Python无法在机器上写入字节码,程序仍然可以工作:字节码将会在内存中生成并在程序结束时简单的丢弃。
● Python虚拟机(PVM)
一旦程序编译成字节码(或字节码从已经存在的.pyc文件中载入),之后的字节码被发送到Python虚拟机(Python Virtual Machine,简写为PVM)上执行。
PVM就是迭代运行字节码指令的一个大循环,一个接一个的完成操作。PVM是Python的运行引擎,时常变现为Python的一部分,并且它是实际运行脚本的组件。从技术上讲,它才是“Python解释器”的最后步。
图1:Python的传统运行执行模式:录入的源代码---->字节码------>在虚拟机中运行,代码自动被编译
在Python的工作中通常没有“ bulid ”或“make ”的步骤:代码在写好之后立即运行。Python字节码不是机器的二进制代码。字节码是Python定义的一种表现形式。