首先区分一下解释性语言和编译性语言
解释型语言 VS 编译型语言
编译性语言需要提前将代码编译成机器码,之后每次运行直接执行机器码即可;
解释性语言则需要一个解释器,每次运行都需要逐行翻译成机器码执行。
Python
脚本运行时解释器会先将脚本编译成字节码,然后对字节码逐一翻译成机器码去执行。这里的字节码指的是PyCodeObject
,是运行时保存在内存里的,如果该代码被import
,则会静态保存成.pyc
文件。
说明白了Python
是解释性语言,那再说说它的解释器,代码编译成机器码需要编译,编译又分成了静态编译和动态编译
静态编译 VS 动态编译
- 静态编译:直接编译成机器码
- 动态编译:即时编译,在运行时编译,会生成更优质的机器码,适用于长时间运行的脚本
那么Python
肯定也有静态编译器和动态编译器,这里说两个重要的:
CPython
(默认)静态编译PyPy
(加速)动态编译
我们下载的Python
默认就是用的CPython
,如果想使用PyPy
,则需要下载PyPy
编译器。