Python IDLE 以及編譯器解釋器的概念梳理

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的程序的運行機制對學習編程技術沒有直接利好,但是我相信很多東西需要知其然且要知其所以然,這樣才能更“懂“你所面對的這個編程語言的思想,對編程這件事會有一個長遠和整體的認知,這樣才能充分發揮編程語言的優勢,創作出優秀的有靈魂的產品.


 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章