所有的高级编程语言到机器代码之间的过程,有两个种类的三种类别。分别是编译和解释,编译型和解释型和编译解释型。
高级程序语言的翻译
计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释
。(即编译或解释:把高级语言转换成机器语言)
- 编译型语言在程序执行之前,
先
会通过编译器对程序执行一个编译
的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。 - 解释型语言就没有这个编译的过程,而是在程序
运行的时候
,通过解释器对程序逐行作出解释
,然后直接运行,最典型的例子是Ruby。 - 编译解释型语言,如Java首先是通过编译器
编译成字节码文件,然后在运行时通过解释器给解释成机器文件
。
Python程序执行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件(注意:只在Py3.x才有,且存在目录:%安装目录%Lib/pycache/)。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
- 当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
- 当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
- 所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
总结:
- PYCodeObject:程序当前编译后的运行之地;
- pyc:是以前成功编译运行后的保存,便于下次直接调出来运行;
Python解释器
由于整个Python语言和规范都是开源的,所有任何人都可以编写Python解释器来执行Python代码;
CPython
官方解释器;用C语言开发;在命令行下运行python就是调用CPython解释器;以“>>>”作为提示符;
Ipython(Interactive Python)
基于CPython之上的一个交互式解释器,即IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的;比如,很多国产浏览器虽然外观不同,但是内核其实都是调用了IE;以“In[序号]:”作为提示符;
PyPy
其目标是执行速度的提升,采用JIT技术,对Python代码进行动态编译(不是解释);
Jython
在java平台上的Python解释器,把Python代码编译成字节码执行;
IronPython
运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码;