對於電腦的CPU,雖然功能強大,但是仍然不能處理Python語言,只能處理機器指令語言。所以需要一個翻譯,把我們所用的語言翻譯成CPU能執行的程式碼。
其實我們安裝JAVA也好,C也好,Python也罷,主要就是安裝的這個程式語言的「編譯器」。
編譯器/直譯器:高階語言與機器之間的翻譯官
Python語法簡單明瞭,貼近人類的使用習慣。作爲一種動態解釋性語言,讓人們在寫程式碼的時候可以更多的關注業務邏輯細節,而不需要花太多精力去關注數據型別定義、程式執行效率等!
當我們編寫Python程式碼時,我們得到的是一個包含Python程式碼的以.py爲擴充套件名的文字檔案。要執行程式碼,就需要Python直譯器去執行.py檔案。
直譯器包括編譯過程,只是這個編譯過程沒有生成目的碼。Python直譯器由編譯器和虛擬機器構成,編譯器將原始碼轉換成位元組碼,然後再通過Python虛擬機器來逐行執行這些位元組碼。
python程式執行過程:
1、執行 .py 檔案,就會啓動python直譯器
2、編譯器將原始檔解釋成位元組碼
3、虛擬機器將位元組碼轉化成機器語言,與操作系統互動
4、程式執行結束後,將位元組碼存到pyc檔案,便於後續直接執行
由於整個Python語言從規範到直譯器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python直譯器來執行Python程式碼(當然難度很大)。事實上,確實存在多種Python直譯器。
CPython
顧名思義,CPython 就是用 C 語言開發的了,是官方標準實現,擁有良好的生態,所以應用也就最爲廣泛了。
當我們從Python官方網站下載並安裝好Python 2.7後,我們就直接獲得了一個官方版本的直譯器:CPython。這個直譯器是用C語言開發的,所以叫CPython。在命令列下執行python就是啓動CPython直譯器。
CPython是使用最廣的Python直譯器。教學的所有程式碼也都在CPython下執行。
IPython
而 IPython 是在 CPython 的基礎之上在互動式方面得到增強的直譯器。
IPython是基於CPython之上的一個互動式直譯器,也就是說,IPython只是在互動方式上有所增強,但是執行Python程式碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但內核其實都是呼叫了IE。
CPython用>>>作爲提示符,而IPython用In [序號]:作爲提示符。
PyPy
PyPy 是 Python 語言(2.7.13和3.5.3)的一種快速、相容的替代實現(http://pypy.org/),以速度快著稱。PyPy採用JIT技術,對Python程式碼進行動態編譯(注意不是解釋),所以可以顯著提高Python程式碼的執行速度。
絕大部分Python程式碼都可以在PyPy下執行,但是PyPy和CPython有一些是不同的,這就導致相同的Python程式碼在兩種直譯器下執行可能會有不同的結果。如果你的程式碼要放到PyPy下執行,就需要瞭解PyPy和CPython的不同點。
Jython
Jython是執行在Java平臺上的Python直譯器,可以直接把Python程式碼編譯成Java位元組碼執行。
IronPython
IronPython和Jython類似,只不過IronPython是執行在微軟.Net平臺上的Python直譯器,可以直接把Python程式碼編譯成.Net的位元組碼。
都說直譯器慢,Python也有想辦法提高一下執行速度的,那就是使用pyc檔案。這點參考了JAVA的位元組碼做法,但並不完全類同。
我們編寫的程式碼一般都會儲存在以.py爲後綴的檔案中。在執行程式時,直譯器逐行讀取原始碼並逐行解釋執行。每執行一次,就重複一次這個過程,這其中耗費了大量的重複性的解釋工作。爲了減少這一重複性的解釋工作,Python引入了pyc檔案,pyc檔案是將py檔案的解釋結果儲存下來的檔案,這樣,下次再執行的時候就不用再解釋了,直接使用pyc檔案就可以了,這無疑大大提高了程式執行速度。