Python IDLE 以及编译器解释器的概念梳理
Python中IDLE是其自带的集成开发工具(IDE:同时拥有编辑、编译、调试、运行等多种功能的集成工具),并且它也是python自带的编译器和解释器。
*python的IDLE命名之所以不叫IDE,据说是根据python创始人Guido Van Rossum喜欢的Monty Python戏剧团的成员名字(Eric Idle艾瑞克.艾多)而来.
*Monty Python 是英国的一个6人组合喜剧团体,曾在十九世纪70~80年代借助他们的电视、影视剧红极一时,python创始人Guido Van Rossum是其影视剧忠实粉丝,于是,Guido Van Rossum 贵泽-范-罗萨姆在90年代创作Python 编程语言时多处借用了Monty Python团体及其成员名。
下边简单梳理下python程序从编辑到执行的过程以及编译器和解释器的概念:
一, python程序从编辑到执行的过程(总是先编译后解释的机制)
首先,我们通过文本编辑器或用自带的IDLE编辑器创建.py文件,并在其中编写python程序,编辑程序完成并调试无误后保存。
然后,通过在IDLE中执行Run Module(或快捷键F5)运行程序,运行的过程本质是IDLE先调用自身的编译功能转换该程序为二进制形式的‘’中间编码‘’,并整理为PyCodeObject对象形式暂时保存在内存中,然后由解释器逐行解释得到最终结果,接下来就会出现python编辑解释机制聪明的地方:(它会针对不同程序类型对python程序执行不同后续操作)
第1种情况,当解释器显示出运行结果后,发现当前python程序是一次性的脚本文件,且未包含导入模块的形式,即当前程序没有可重用性,它便不会保存解释后的所得结果到.pyc文件,也就不会出现.pyc文件(.pyc文件被称为字节码文件,是程序先编译后解释结果的编码,是二进制文本)。
第2种情况,当解释器处理得到结果,暂存于内存中,并发现该程序中有可重用的模块,即出现了import模块语句(高可重用性的脚本文件)且导入的模块非IDLE自带模块,解释器便聪明的将该程序保存到.pyc文件中,如此,下次再执行时,就不用再编译,节省了时间。
**证实这一点可以编辑如下两个python 文件来验证:
1, prints.py
def printS(s):
print(‘return:%s’%s)
2, printstr.py
From prints import prints
printS(‘hello world’)
然后执行printstr.py文件,便会在同目录出现关于prints文件名的文件夹,其中有关于prints的.pyc文件。这就是解释器判断到执行程序中导入了可重用性模块,便将其先编译后解释的结果保存在.pyc文件中,以备下次重复执行时使用,节约了再编译的时间成本。
如果想要强制生成.pyc文件,可在msdos命令行使用命令:(例如源文件hello.py)
python -m hello.py #在源文件所在目录运行后即生成hello.pyc
二, python的编译器和解释器
计算机不能直接理解机器语言(二进制语言)以外的其他语言,所以必须把编写的程序翻译为机器可执行的机器语言,才能被计算机识别并执行。实现某种编程语言的这个翻译功能的机制被称为编译。
解释器,在python中解释器主要的功能实现有三点,第一,把编译得到的在内存中的pyCodeObject程序对象转告给计算机处理模块,告诉它先后处理顺序;第二,判断提交给处理器的已经编译过的pyCodeObject程序对象是否具有可重用性,若该对象有可重用性就将其保存到.pyc文件中,以便下次再用到时直接调用,不需再编译。第三,解释器将计算机处理器运算后的结果呈现出来或返回给被调用处。
Python的解释器在不同环境下分为多种,常见的有5种:
1,CPython
当我们从Python官方网站下载并安装好Python后,就获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。启动IDLE就是启动CPython解释器。CPython是使用最广的Python解释器。
2,IPython
IPython是基于CPython之上的一个交互式解释器, IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。
CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
3,PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译,所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。
4,Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
5,IronPython
IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
以上综合最近学习,梳理了下各个知识点及其之间的联系,虽然花时间去了解python的程序的运行机制对学习编程技术没有直接利好,但是我相信很多东西需要知其然且要知其所以然,这样才能更“懂“你所面对的这个编程语言的思想,对编程这件事会有一个长远和整体的认知,这样才能充分发挥编程语言的优势,创作出优秀的有灵魂的产品.