由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。
CPython
当我们从Python官方网站下载并安装好Python 3.4后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python
就是启动CPython解释器。
CPython是使用最广的Python解释器。这里也以CPython做为解释器来学习。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>
作为提示符,而IPython用In [序号]:
作为提示符。
PyPy
PyPy是另一个Python解释器,被认为是Python的未来,它的主要优势是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
由于C跟底层过于接近,所以实现JIT有诸多限制。(比如Psyco到项目死亡为止都没能实现出64位的JIT解释器)
Pypy则换了另外一种思路。它先实现了一个Python的子集(注意,不是完整的python),叫RPython。然后用RPython去实现了Python的JIT解释器。这个RPython本身,并不依赖运行时解释器,而是直接被翻译成C代码(实际上可以翻译成多种目标代码,如Java、C#等)再进行编译,本质上它是一种编译型语言。所以,用RPython写出来的程序,最终是会被编译成本地代码的,跟C写的没有本质区别。
由于RPython作者强大的优化功力,RPython程序最终编译结果基本等同于C直接写的效率。用这种程序实现出来的JIT解释器,自然也不会慢。而JIT技术,又保证了运行在这个解释器上的Python程序的效率的提升。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
小结
Python的解释器很多,但目前使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。