我并没有在CPython的上下文中得到“字节码解释器”的概念。有人可以对整个情况有所了解吗?
这是否意味着CPython将编译并执行pyc文件(字节码文件?)。那么编译py文件到pyc文件是什么? Jython与CPython有什么不同(除了它们用不同的语言实现)。
我还在某处读过Python是C ++的解释。它是否正确?这是什么意思?
我对Python仍然很陌生,所以如果我问愚蠢的问题,请原谅我...... 非常感谢你!
答案 0 :(得分:14)
CPython是C语言中Python的实现。它是第一个实现,仍然是人们谈论Python时的主要实现。它将.py文件编译为.pyc文件。 .pyc文件包含字节码。 CPython实现还解释了那些字节码。 CPython不是用C ++编写的,而是C语言。
从.py到.pyc的编译根据需要透明地进行。执行.py文件时,如果需要,它将首先编译为.pyc文件,然后解释.pyc文件。
Jython是不同的,因为(除了用Java而不是C实现)它将.py文件编译成.class文件,以便它们可以在JVM中执行。
答案 1 :(得分:12)
首先:CPython是字节码解释器这一事实对你来说不应该是python的用户。继续编写代码,不要担心它是如何变成行动的。
所以,为了回答你的问题并满足你的好奇心,接下来会发生什么:CPython读取python源代码,并将其编译成python字节代码,存储在.pyc文件中。然后它使用字节码解释器执行该代码。这种设计将python的解析与执行分开,允许解释器的两个部分更简单。
Jython只是前半部分 - 它读取Python源代码,并输出Java字节码,然后由JVM解释。它与CPython具有相同的体系结构,有两个值得注意的差异:一:java字节码是标准化和记录的,而CPython字节码被认为是python内部的,并且可以随时更改。二:JVM比CPython解释器复杂得多。 JVM拥有世界上最先进的JIT引擎之一,而CPython解释器非常简单。
答案 2 :(得分:8)
CPython既是字节码编译器又是解释器(虚拟机)。
它会自动检测是否存在现有的预编译文件(.pyc),编译代码并将其保存。