Python 是编译型还是解释型?
简短的回答是:Python 是解释型的。
在编写 Python 代码之后和运行 .py 文件之前没有单独的编译步骤。
您从 python.org 下载的 Python 解释器软件称为 CPython,因为它是用 C 语言编写的。
可以使用 Py2Exe(在 Windows 上)、py2app(在 macOS 上)或 BeeWare(所有操作系统,包括移动设备)等工具将 Python 编译成二进制可执行文件。
有趣的是,还有 PyPy,一个用 Python 编写的 Python 解释器。
当你运行一个 Python 程序时,解释器首先将它编译成字节码,然后运行字节码。 所以你可以说 Python 是编译过的。
字节码是虚拟机 (VM) 软件运行的一组基本指令,就像机器码是 CPU 运行的一组基本指令一样。
字节码的好处是不同操作系统上的解释器虚拟机可以运行相同的程序。 (尽管操作系统最初是为在不同的计算机硬件上运行相同的程序而编写的。)
Python 在技术上既不编译也不解释,因为 Python 是一种语言,您可以为任何语言编写解释器或编译器。
尽管如此,大多数语言还是被认为是“编译型”或“解释型”的,因为它们通常是用编译器或解释器实现的。 从这个意义上讲,C++ 是编译的,Python 是解释的。
解释型编程语言通常称为脚本语言,但 Java 解释字节码,不被视为脚本语言。
高级语言曾经是在机器代码或汇编之上具有抽象层的任何语言。 C 曾经被认为是一种高级语言,但现在被认为是一种低级或裸机语言,因为它不如 Java、Python 或 JavaScript 等语言抽象。
转译器将一种编程语言的源代码编译成另一种编程语言的源代码。 TypeScript 是一种流行的转译器,它将使用 TypeScript 语言(添加了类型安全功能)编写的源代码编译成 JavaScript 源代码,以便它可以在 Web 浏览器中由 JavaScript 解释器运行。
还有即时 (JIT) 编译,其中字节码解释器分析程序的哪些部分运行最频繁,然后将这些部分编译为机器代码以加快执行速度。
Java代码由Java编译器编译。 但它编译为字节码,由 Java VM 解释。 尽管如此,Java 仍被认为是一种编译语言,而不是一种解释语言或脚本语言。
随着软件开发人员添加更多的抽象层,这些定义变得更加松散和模糊。 花时间争论它们可能不值得。
如果您想了解编译器的工作原理,我建议您先阅读我的免费书籍 The Recursive Book of Recursion 来学习递归,然后参加编译器课程,例如 Aiken 博士的在线编译器课程。