为什么会有编译器/解释器
如上图:python、java、php都是高级语言,而计算机(机器)只能读懂机器语言(二进制),所以此时,如果Python想要直接传递输出hi这个信息给计算机时,计算机是不能直接理解的。
比如你跟一个黑人大哥说中文,两个人是没有办法直接交流的。所以我们就需要使用编译器/解释器去进行翻译。
编译器与解释器
编译器/解释器:高级语言与机器之间的翻译官
都是将代码翻译成机器可以执行的二进制机器码,只不过在运行原理和翻译过程有不同而已。
编译器与解释器的区别
举个栗子:
如上图,编译器相当于海底捞桶,这时材料已经全部整合好,只要泡开就可以享受美食。所以优点在于整个过程的速度也是比较快的,但是缺点也是非常的赤裸裸,因为你想要加个鸭肠时,是没有办法的。
那解释器就相当于是在海底捞店,与几个老铁唠着嗑,下一点吃一点,此时的速度非常慢,但是却相对来说想吃点啥加点啥,非常灵活。
总结如下:
- 编译器:先整体编译再执行
- 解释器:边解释边执行
Python解释器种类
- CPython:官方版本的解释器。这个解释器是用C语言开发的,所以叫CPython。CPython是使用最广的Python解释器。我们通常说的、下载的、讨论的、使用的都是这个解释器。
- Ipython:基于CPython之上的一个交互式解释器,在交互方式上有所增强,执行Python代码的功能和CPython是完全一样的。CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
- PyPy:一个追求执行速度的Python解释器。采用JIT技术,对Python代码进行动态编译(注意,不是解释),可以显著提高Python代码的执行速度。绝大部分CPython代码都可以在PyPy下运行,但还是有一些不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。
- Jython:运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
- IronPython:和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
Python的运行机制
Python作为动态解释性语言,其运行机制可参考如下:
都说解释器慢,Python也有想办法提高一下运行速度的,那就是使用pyc文件。这点参考了JAVA的字节码做法,但并不完全类同。
我们编写的代码一般都会保存在以.py为后缀的文件中。在执行程序时,解释器逐行读取源代码并逐行解释运行。每执行一次,就重复一次这个过程,这其中耗费了大量的重复性的解释工作。为了减少这一重复性的解释工作,Python引入了pyc文件,pyc文件是将py文件的解释结果保存下来的文件,这样,下次再运行的时候就不用再解释了,直接使用pyc文件就可以了,这无疑大大提高了程序运行速度。