一.python解釋器介紹
Python解釋器是一種讓程序運行起來的程序。實際上,解釋器是代碼與機器的計算機硬件之間的軟件邏輯層。
當Python包安裝在機器上后,它包含了一些最小化的組件:一個解釋器和支持的庫。
二.python的視角
當Python運行腳本時,第一步是把代碼編譯成“字節碼”,之后將其轉發到所謂的“虛擬機”中。
1.第一步:字節碼編譯
當程序執行時,Python內部會先將源代碼(文件中的語句)編譯成所謂字節碼的形式。編譯是一個簡單的翻譯步驟,而且字節碼是源代碼底層的、與平臺無關的表現形式。概括地說,Python通過把每一條源語句分解為單一步驟來將這些源語句翻譯成一組字節碼指令。這些字節碼可以提高執行速度。
即,把后綴名為.pyc的文件-->后綴名為.py的文件。
Python這樣保存字節碼是作為一種啟動速度的優化。下一次運行程序時,如果你在上次保存字節碼之后沒有修改過源代碼的話,Python將會加載.pyc文件并跳過編譯這個步驟。
2.第二步:python虛擬機(pvm)
一旦程序編譯成字節碼(或字節碼從已經存在的.pyc文件中載入),之后的字節碼發送到通常稱為Python虛擬機(Python Virtual Machine,簡寫為PVM)上來執行。從技術上講,它才是所謂“Python解釋器”的最后一步。
3.性能的含義
在Python的工作中通常沒有“build”或“make”的步驟:代碼在寫好之后立即運行。另外一個就是,Python字節碼不是機器的二進制代碼(例如,Intel芯片的指令)。字節碼是特定于Python的一種表現形式。
這就是Python代碼無法運行得像C或C++代碼一樣快的原因。
從更基礎的角度來說,牢記我們在Python中真正擁有的只有運行時:完全不需要初始的編譯階段,所有的事情都是在程序運行時發生的。這甚至還包括了建立函數和類的操作以及連接的模塊。這些事情對于靜態語言往往是發生在執行之前的,而在Python中是與程序的執行同時進行的。就像我們看到的那樣,實際的效果就是Python比一些讀者所用的程序語言帶來了更加動態的編程體驗。
4.CPython
原始的、標準的Python實現方式通常稱作CPython。圖2-2反映了CPython的運行體系結構。
5.Jython
Jython包含了Java類,這些類編譯Python源代碼、形成Java字節碼,并將得到的字節碼映射到Java虛擬機(JVM)上。程序員仍然可以像平常一樣,在文本文件中編寫Python語句;Jython系統的本質是將圖2-2中的最右邊兩個方框中的內容替換為基于Java的等效實現。
6.IroPython
它替換了圖2-2中最后的兩個方框,將其換成.NET環境的等效執行方式。