山姆的編程實作分享。。。

Sam Blog, Sam Sharing, Sam Studio

2020年4月5日

[Python] Python Internal


Python Internal

有需要了解Python 內部是如何運作 ?

從組合語言、C語言一路學習上來,學習新的程式語言,總是會先探究他的內部,雖然不必深入了解他內部的運作,但是清楚的知道他的優劣運作流程以及他已經為我們做哪些,個人覺得是必要的。

Python Benefit

  1. 擁有其他眾多程式語言的優點,例如 C++、 Java …

  2. OOP (Object Oriented Programming) 程式語言, like C++

  3. 直譯式 (Interpreted) 程式語言, like Java

  4. 可攜性( Portability of source code and VM), Like Java

  5.  記憶體管理 (memory management) (註1)

Python Internal

這篇Design of the CPython Compiler 可以清楚知道Python 是如何將我們程式碼轉換成CPU可執行的程式碼了。

以下就是文中列出Python 2.5 轉換的步驟:

  1. Parse source code into a parse tree (Parser/pgen.c)

  2. Transform parse tree into an Abstract Syntax Tree (Python/ast.c)

  3. Transform AST into a Control Flow Graph (Python/compile.c)

  4. Emit bytecode based on the Control Flow Graph (Python/compile.c)


更確切說是,轉換成bytecode 再交給(emit) VM (Virtual Machine)執行。

Python 不像C語言,會直接轉成CPU 看的懂的機器語言 (machine language),而是像Java language 會有一個 VM來執行bytecode,

這也讓Python 具有可攜性 (Portability) 的優點;同一套程式碼只要配上相對平台的VM,就可以在不必修改程式碼的情況下,在任何平台上執行了。

整個Python 內部運作就好像下圖

Python code 經過 pgen.c、ast.c、compile.c 轉換成bytecode,emit PVM (Python Virtual Machine) 執行。


註1 :

個人認為這點是讓他火紅的重中之重,第一,不像C語言的程式設計人員,總是在為記憶體的漏洞煩惱;再者,對於剛接觸程式語言的新手,學習Python,記憶體管理已不再是必要選項;少了記憶體管理的煩惱,相對地,增加程式設計帶來的成就感,這也讓他的效率 (Performance) 的缺點被眾人給忽略了,讓坊間的教育單位一致的推薦Python 為入門的程式語言。


熱門文章