Python 是一門解釋型的程式語言,因此它具有直譯語言的執行機制。
計算機程式,其實就是一組計算機指令集,能真正驅動機器執行的是機器指令,但讓普通開發者直接編寫機器指令是不現實的,因此就出現了計算機高階語言。高階語言允許使用自然語言(通常就是英語)來程式設計,但高階語言的程式最終必須被翻譯成機器指令來執行。
高階語言按程式的執行方式可以分為編譯型和解釋型兩種。
編譯型語言是指使用專門的編譯器,針對特定平台(作業系統)將某種高階語言原始碼一次性“翻譯”成可被該平台硬體執行的機器碼(包括機器指令和運算元),並包裝成該平台所能識別的可執行程式的格式,這個轉換過程稱為編譯(Compile)。編譯生成的可執行程式可以脫離開發環境,在特定的平台上獨立執行。
有些程式編譯結束後,還可能需要對其他編譯好的目的碼進行連結,即組裝兩個以上的目的碼模組生成最終的可執行程式,通過這種方式實現低層次的程式碼複用。
因為編譯型語言是一次性編譯成機器碼的,所以可以脫離開發環境獨立執行,而且通常執行效率較高。但因為編譯型語言的程式被編譯成特定平台上的機器碼,因此編譯生成的可執行程式通常無法移植到其他平台上執行,如果需要移植,則必須將原始碼複製到特定平台上,針對特定平台進行修改,至少需要採用特定平台上的編譯器重新編譯。
現有的 C 、C++、Objective-C、Pascal 等高階語言都屬於編譯型語言。
直譯語言是指使用專門的直譯器對源程式逐行解釋成特定平台的機器碼並立即執行的語言。直譯語言通常不會進行整體性的編譯和連結處理,直譯語言相當於把編譯型語言中的編譯和解釋過程混合到一起同時完成。
可以這樣認為,每次執行直譯語言的程式都需要進行一次編譯,因此直譯語言的程式執行效率通常較低,而且不能脫離直譯器獨立執行。但直譯語言有一個優勢,就是跨平台比較容易,只需提供特定平台的直譯器即可,每個特定平台上的直譯器都負責將源程式解釋成特定平台的機器指令。直譯語言可以方便地實現源程式級的移植,但這是以犧牲程式執行效率為代價的。
編譯型語言和直譯語言的對比如圖 1 所示。
圖 1 編譯型語言和直譯語言