是的,它既是编译语言又是解释语言。 那为什么我们一般称它为解释型语言呢?
看看它是如何编译和解释的?
首先,我想告诉您,如果您来自 Java 世界,您会更喜欢我的回答。
在 Java 中,源代码首先通过javac编译器转换为字节码,然后定向到JVM(负责生成用于执行目的的本机代码)。现在我想向您展示我们将 Java 称为编译语言,因为我们可以看到它确实编译了源代码并通过以下方式提供了.class文件(除了字节码):
javac Hello.java -------> 生成Hello.class文件
java Hello -------->将字节码定向到JVM用于执行目的
python 也会发生同样的事情,即首先源代码通过编译器转换为字节码,然后定向到PVM(负责生成用于执行目的的本机代码)。现在我想向您展示我们通常将 Python 称为解释语言,因为编译发生在幕后
并且当我们通过以下方式运行 Python 代码时:
python Hello.py --------> 直接执行代码,如果代码语法正确,我们可以看到输出
@python Hello.py它看起来像是直接执行,但实际上它首先生成由解释器解释的字节码以生成用于执行目的的本机代码。
CPython - 负责编译和解释。
如果您需要更多详细信息,请查看以下几行:
正如我提到的,CPython会编译源代码,但实际编译是在cython的帮助下进行的,然后在CPython的帮助下进行解释
现在让我们稍微谈谈Just-In-Time编译器在Java和Python中的作用
在 JVM 中存在 Java 解释器,它逐行解释字节码以获取本机机器码以用于执行目的,但是当 Java 字节码由解释器执行时,执行总是会变慢。那么解决方案是什么?解决方案是即时编译器,它生成的本机代码可以比解释的速度更快地执行。一些 JVM 供应商使用Java Interpreter,一些使用Just-In-Time 编译器。参考:点这里
在 python 中绕过解释器以实现快速执行使用另一个 python 实现(PyPy)而不是CPython。
单击此处查看其他 python 实现,包括PyPy。