前言
Python程序执行时,
第一步是将Python程序编译成字节码(字节码是源代码底层的, 与平台无关的表现形式, 实现跨平台的重要特性; 字节码可以提高执行速度, 比起文本文件中的源代码语句, 字节码的运行速度要快得多)。注意, 字节码不是机器的二进制代码(例如, Intel芯片的指令), 字节码是特定于Python的一种表现形式
第二步是字节码转发到Python虚拟机(PVM)中运行(类似Java虚拟机(JVM)), PVM就是迭代运行字节码指令的一个大循环, 一个接一个地完成操作 (PVM不是一个独立的程序, 只是Python系统的一部分)。实际上, PVM循环仍需解释字节码
Ps: 字节码编译过程是对用户完全隐藏的, 如果Python进程在机器上拥有写入权限, 那么它将把程序的字节码保存为一个以.pyc
为扩展名的文件(.pyc
表示的是编译过的.py
源代码 -> python complied
)。如果Python没有写入权限, 程序仍然可以工作, 只是字节码会在内存中生成, 并在程序结束时简单地丢弃。
字节码的好处
Python保存字节码可以作为一种启动速度的优化
如果你在上次保存字节码之后没有修改过源代码, Python将会加载.pyc
文件并跳过编译这个步骤。当Python
必须重编译时, 它会自动检查源文件和字节码的时间戳, 即当你修改并保存了源代码, 下次程序运行时, 字节码将自动重新创建字节码是源代码底层的, 与平台无关的表现形式, 实现跨平台的重要特性
可以隐藏源代码