CPython是字节码解释器吗?

时间:2009-10-29 15:39:57

标签: c++ python interpreter bytecode cpython

我并没有在CPython的上下文中得到“字节码解释器”的概念。有人可以对整个情况有所了解吗?

这是否意味着CPython将编译并执行pyc文件(字节码文件?)。那么编译py文件到pyc文件是什么? Jython与CPython有什么不同(除了它们用不同的语言实现)。

我还在某处读过Python是C ++的解释。它是否正确?这是什么意思?

我对Python仍然很陌生,所以如果我问愚蠢的问题,请原谅我...... 非常感谢你!

3 个答案:

答案 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),编译代码并将其保存。