第二章 python如何執行程式
一.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環境的等效執行方式。
&n