是的,它既是编译语言,又是解释语言。 那为什么我们通常将其称为解释语言呢?
看看它是如何被编译和解释的?
首先,我想告诉您,如果您来自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的帮助下发生的
现在让我们谈谈即时编译器在Java和Python中的作用
在JVM中,存在Java解释器,该解释器逐行解释字节码以获取用于执行目的的本机代码,但是当Java字节码由解释器执行时,执行总是较慢。那么解决方案是什么?解决方案是即时编译器,该编译器生成的本机代码可以比解释的快得多地执行。一些JVM供应商使用Java解释器,而另一些则使用即时编译器。参考:点击这里
在python中绕过解释器以实现快速执行,请使用另一个python实现(PyPy)而不是CPython。
点击此处查看python的其他实现,包括PyPy。