剖析Python源代碼

日期:2019-09-19 14:51:02 作者:墨魚 出自:内蒙古快3推荐开奖结果

在剖析源碼的過程中,最好的學習方法是不斷根據掌握的知識修改Python源代碼,以印證自己的知識和猜想。

一、Python總體架構

  在最高的層次上,Python的整體架構可以分為三個主要部分,如上圖,左邊的Core Modules(內置???、Library(庫)以及User-defined Modules(用戶自定義???。

  在圖的右邊,是Python的運行時環境,包括對象/類型系統(Object/Type stuctures)、內存分配器(Memory Allocator)和運行時狀態信息(Current State of Python )。運行時狀態維護了解釋器在執行字節碼時不同的狀態(比如正常狀態和異常狀態)之間切換的動作,我們可以將它視為一個巨大而復雜的有窮狀態機。內存分配器則全權負責Python中創建對象時,對內存的申請工作,實際上它就是Python運行時與C中malloc的一層接口。而對象/類型系統則包含了Python中存在的各種內建對象,比如整數、list和dict,以及各種用戶自定義的類型和對象。

  中間的部分,是python的核心——解釋器(interpreter),也稱為虛擬機。在解釋器中,箭頭的方向指示了Python運行過程中的數據流方向。其中Scanner對應詞法分析,將文件輸入的Python源代碼或從命令行輸入的一行行Python代碼切分為一個個的token(指令): Parser對應語法分析,在Scanner的分析結果上進行語法分析,建立抽象語法樹(AST):Compiler(編譯器)是根據建立的AST生成指令集合——Python字節碼(byte code),最后由Code Evaluator來執行這些字節碼。因此,Code Evaluator又可以被稱為虛擬機。

  圖中,在解釋器與右邊的對象/類型系統、內存分配器之間的箭頭表示"使用"關系;而與運行時狀態之間的箭頭表示“修改”關系,即Python在執行的過程中會不斷地修改當前解釋器所處的狀態,在不同的狀態之間切換。

二、Python源代碼結構

  Python源碼下載地址:

  選擇相應的版本下載,本文以最新版進行分析。  wget

  Include:  該目錄下包含了Python提供的所有頭文件,如果用戶需要自己用C或C++來編寫自定義??槔┱筆ython,就需要用到這里提供的頭文件。

  Lib:    該目錄包含了Python自帶的所有標準庫,Lib中的庫都是用Python語言編寫的。

  Modules:  該目錄中包含了所有用C語言編寫的???,比如random、cStringIO等。Modules中的??槭悄切┒運俁紉蠓淺Q細竦哪??,而有一些對速度沒有太嚴格要求的???,比如os,就是用Python編寫的,并且放在Lib目錄下。

  Parser:  該目錄中包含了Python解釋器中的Scanner和Parser部分,即對Python源代碼進行詞法分析和語法分析的部分。除了這些,Parse目錄下還包含了一些有用的工具,這些工具能夠根據Python語言的語法自動生成Python語言的詞法和語法分析器,與YACC非常類似。

  Objects:  該目錄中包含了所有Python的內建對象,包括整數、list、dict等。同時,該目錄還包括了Python在運行時需要的所有的內部使用對象的實現。

  Python:  該目錄下包含了Python解釋器中的Compiler和執行引擎部分,是Python運行的核心所在。

三、編譯安裝

  ./configure

  make all 

  make install



上一篇:關于php版微信開發如何接收消息,自動判斷跟回復相應消息的方法 下一篇:怎么讓網站標簽發揮最大的作用?
18585853123
在線留言