什么是关于Python和CPython(Jython,IronPython)的所有这些大惊小怪,我不明白:
python.org提到CPython是:
Python的“传统”实现(绰号CPython)
yet another Stack Overflow question提到:
CPython是Python的默认字节码解释器,用C语言编写。
老实说,我没有得到这两个解释实际上意味着什么,但我认为,如果我使用CPython,这意味着当我运行示例python代码时,它将它编译为C语言,然后执行它就好像它是C码
那么CPython究竟是什么呢?与python相比它有何不同?我是否应该使用CPython而不是Python,如果有的话,它的优点是什么?
CPython是最初的Python实现。这是您从Python.org下载的实现。人们将其称为CPython,以区别于其他后来的Python实现,并将语言引擎的实现与Python编程语言本身区分开来。
后半部分是你的困惑所在;你需要将Python-the-language与运行Python代码的任何东西分开。
CPython恰好用C实现。这只是一个实现细节,真的。 CPython将您的Python代码编译为字节码(透明地)并在评估循环中解释该字节码。
CPython也是第一个实现新功能的人; Python-the-language开发使用CPython作为基础;其他实现如下。
Jython,IronPython和PyPy是Python编程语言的当前“其他”实现;它们分别在Java,C#和RPython(Python的一个子集)中实现。 Jython将您的Python代码编译为Java字节码,因此您的Python代码可以在JVM上运行。 IronPython允许您在Microsoft CLR上运行Python。 PyPy是在Python的(子集)中实现的,它允许您比CPython更快地运行Python代码,这应该让您大吃一惊。 :-)
因此CPython不会将您的Python代码本身转换为C.相反,它运行一个解释器循环。有一个项目将Python-ish代码转换为C,这就是所谓的Cython。 Cython为Python语言添加了一些扩展,并允许您将代码编译为C扩展,即插入CPython解释器的代码。
您需要区分语言和实现。 Python是一种语言,
根据Wikipedia的说法,“编程语言是编写程序的符号,它是计算或算法的规范”。这意味着它只是编写代码的规则和语法。另外,我们有一个programming language implementation,在大多数情况下,它是实际的解释器或编译器。
Python是一种语言。 CPython是C中Python的实现.Jython是Java中的实现,依此类推。
总结一下:您已经在使用CPython(如果您从here下载)。
这个article彻底解释了Python的不同实现之间的区别。就像文章所说:
首先要意识到'Python'是一个界面。有一个Python应该做什么以及它应该如何表现的规范(与任何接口一样)。并且有多种实现(与任何接口一样)。
要实现的第二件事是“解释”和“编译”是实现的属性,而不是接口。
即使我有同样的问题,了解CPython,JPython,IronPython,PyPy是如何彼此不同的。
所以,在我开始解释之前,我愿意清除三件事:
CPython是实现,它是用C语言编写的。它最终生成字节码(基于堆栈机器的指令集),这是特定于Python的,然后执行它。将Python代码转换为字节码的原因是因为如果它看起来像机器指令,则更容易实现解释器。但是,在执行Python代码之前没有必要生成一些字节码(但CPython确实产生了)。
如果你想查看CPython的字节码,那么你可以。以下是您的方法:
>>> def f(x, y): # line 1
... print("Hello") # line 2
... if x: # line 3
... y += x # line 4
... print(x, y) # line 5
... return x+y # line 6
... # line 7
>>> import dis # line 8
>>> dis.dis(f) # line 9
2 0 LOAD_GLOBAL 0 (print)
2 LOAD_CONST 1 ('Hello')
4 CALL_FUNCTION 1
6 POP_TOP
3 8 LOAD_FAST 0 (x)
10 POP_JUMP_IF_FALSE 20
4 12 LOAD_FAST 1 (y)
14 LOAD_FAST 0 (x)
16 INPLACE_ADD
18 STORE_FAST 1 (y)
5 >> 20 LOAD_GLOBAL 0 (print)
22 LOAD_FAST 0 (x)
24 LOAD_FAST 1 (y)
26 CALL_FUNCTION 2
28 POP_TOP
6 30 LOAD_FAST 0 (x)
32 LOAD_FAST 1 (y)
34 BINARY_ADD
36 RETURN_VALUE
现在,我们来看看上面的代码。第1行到第6行是函数定义。在第8行中,我们导入'dis'模块,该模块可用于查看由CPython(解释器)生成的中间Python字节码(或者您可以说,Python字节码的反汇编程序)。
注意:我从#python IRC频道获得了此代码的链接:https://gist.github.com/nedbat/e89fa710db0edfb9057dc8d18d979f9c
然后,有Jython,它是用Java编写的,最终生成Java字节码。 Java字节代码在Java Runtime Environment上运行,Java Runtime Environment是Java虚拟机(JVM)的一种实现。如果这令人困惑,那么我怀疑你不知道Java是如何工作的。通俗地说,Java(语言,而不是编译器)代码由Java编译器获取并输出只能使用JRE运行的文件(Java字节代码)。这样做是为了一旦Java代码被编译,那么它就可以以Java字节代码格式移植到其他机器上,这只能由JRE运行。如果这仍然令人困惑,那么你可能想看看这个web page。
在这里,您可能会问CPython的字节码是否像Jython一样可移植,我怀疑不是。 CPython实现中生成的字节码特定于该解释器,以便于进一步执行代码(我还怀疑,这样的中间字节码生成,只是为了便于处理在许多其他解释器中完成)。
因此,在Jython中,当您编译Python代码时,最终会得到Java字节代码,它可以在JVM上运行。
类似地,IronPython(用C#语言编写)将Python代码编译为公共语言运行时(CLR),与Microsoft开发的JVM相比,这是一种类似的技术。
Python是一种语言:一组可用于编写程序的规则。这种语言有几种实现方式。
无论你采取什么样的实现,它们都做同样的事情:获取程序的文本并解释它,执行它的指令。他们都没有将您的代码编译成C或任何其他语言。
CPython是用C编写的原始实现。(“CPython”中的“C”部分指的是用于编写Python解释器本身的语言。)
Jython是相同的语言(Python),但使用Java实现。
IronPython解释器是用C#编写的。
还有PyPy - 一个用Python编写的Python解释器。你的选择:)
implementation
表示使用什么语言来实现Python,而不是如何实现python Code。使用CPython的优点是C Run-time的可用性以及与C / C ++的轻松集成。
所以CPython最初是使用C
实现的。原始实现还有其他分支,使Python能够利用Java(JYthon)或.NET Runtime(IronPython)。
根据您使用的实现,库可用性可能会有所不同,例如Ctypes is not available in Jython,因此任何使用ctypes的库都无法在Jython中运行。同样,如果要使用Java类,则无法直接从CPython执行此操作。你需要一个胶水(JEPP)或需要使用Jython(Python的Java实现)
你应该知道,由于Global Interpreter Lock,CPython并不真正支持多线程。它也没有用于递归的优化机制,并且还有许多其他实现和库试图填充的其他限制。
你应该看看python wiki上的this page。
看看this页面上的代码片段,它会让你很好地了解解释器是什么。
Python的原始和标准实现通常被称为CPython
,当你想将它与其他选项对比时(否则就是普通的“Python”)。这个名字来自它是用便携式ANSI C language code
编码的事实。这是您从http://www.python.org获取的Python,使用ActivePython和Enthought发行版,并自动在大多数Linux和Mac OS X计算机上运行。如果您在计算机上找到了预装的Python版本,那么它可能是CPython
,除非您的公司或组织以更专业的方式使用Python。
除非你想用Python编写
Java
或.NET
应用程序脚本或者发现Stackless
或PyPy
引人注目的好处,否则你可能想要使用标准的CPython
系统。因为它是该语言的参考实现,所以它往往运行速度最快,最完整,并且比替代系统更新,更强大。
编程语言实现是用于执行计算机程序的系统。
编程语言实现有两种通用方法:
Python是由Guido van Rossum于1991年创建的一种解释型高级编程语言。
CPython是Python计算语言的参考版本,它是用Guido van Rossum创建的C编写的。