摄影:CaseyHorneronUnsplash
有人在讨论Python代码是编译的还是解释的? 这个问题也可以换个说法:Python是编译型语言还是解释型语言? 在回答这个问题之前,我们先弄清楚哪些是编译型语言,哪些是解释型语言。
所谓编译执行,是指源代码经过编译器的编译处理,生成目标机器码,这是机器可以直接运行的二进制补码,不需要上次重新编译被运行。 但它是针对特定的CPU系统,这段目标代码只能在特定的平台上执行,如果这段程序需要在另一个CPU上运行,这段代码必须重新编译。 它不可移植并且执行速度很快。 C、C++等语言都是编译型语言。
解释型语言在代码运行过程中逐行翻译成目标机器代码。 上次执行的时候,还是需要逐行解释。 我们可以简单地认为Java和Python都是解释型语言。
编译型相当于糕点师直接准备一道椅子菜,客人来了就可以直接吃,而讲解型则像吃烧烤。 糕点师洗碗python源码编译报错,客人需要自己做饭、吃饭。 就效率而言,解释型语言自然不如编译型语言,但也不是绝对的。 JIT的效率非常高。
上面是编译型语言和解释型语言的简单粗暴的区分,而Python(这里主要指CPython)并不是严格意义上的解释型语言,因为Python代码在运行之前会被编译(翻译)成中间代码,每次。 py 文件将转换为 .pyc 文件。 .pyc是字节码文件,是与平台无关的中间代码。 无论你放在Windows还是Linux平台上都可以执行。 运行时将由虚拟机将字节码逐行翻译成目标代码。
当我们安装Python时,会有一个Python.exe文件,它就是Python的类库。 你编写的每一行Python代码都会由它执行。 协程由编译器和虚拟机组成。 编译器负责将源代码转换为字节码文件python源码编译报错,虚拟机负责执行字节码。 因此,解释型语言虽然也有编译过程,但编译过程并不直接生成目标代码,而是生成中间代码(字节码)。 然后字节码通过虚拟机逐行解释执行。
总结
Python代码首先编写一个字节码文件,然后虚拟机逐行解释它,将每一行字节码翻译成目标指令供CPU执行。
Python爱好者社区历史文章合集:
福利:扫描文末二维码,立即关注公众号“Python爱好者社区”,开始学习Python课程: