是的,它既是编译语言又是解释语言。 那么为什么我们通常称它为解释语言呢?
看看它如何同时具备编译和解释:
首先我想告诉你,如果你来自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。
点击这里 查看包括
PyPy在内的其他Python实现。