Python的總體架構

jopen 10年前發布 | 42K 次閱讀 Python Python開發

學習環境:
系統:ubuntu 12.04 STL
python版本:2.7
既然要學習python的源碼,首先我們要在電腦上安裝python并且下載python的源碼,ubuntu 12.04 STL
自帶的python版本為2.7.3,這就可以了,接下來下載源碼,訪問這個網址: 點擊此處,下載python2.7.7的源代碼,下載結束后解壓文件,我們會看到如下文件結構:

Python的總體架構,接下來介紹一下,
demo文件夾里放的是一些例子;
Doc文件夾里放的是文檔,Grammer是語法分析器,include是python所包含的一些頭文件,Lib是python的庫,都是用 python語言寫的,Moduels是用C寫的python模塊,Parser是分詞器。圖片是最生動的文字,現在我來附上我所理解的python總體 架構圖片:

Python的總體架構
其中,最左邊的python的庫,模塊以及用戶自定義的模塊,都依賴于python解釋器來實現,而python解釋器主要包括掃描器,分詞器,編譯器和代碼生成四部分,我們寫一個python文件之后,由python解釋器執行,其大致執行過程如下:
1、掃描器掃描python文件,將掃描結果發給分詞器;
2、在掃描過程中識別出文件中的對象,類型和結構(注:在python中類型和結構都是對象);
3、分詞器將結果發給編譯器,編譯器在此時生成相應對象同時給對象分配內存空間;
4、編譯之后將代碼生成,進行內存管理并處理當前狀態。
5、對象、類型、結構體、內存管理以及當前狀態構成了python極其復雜的runtime運行時。
還有,很多人會有疑問,python是動態語言,內存到底是如何管理的,初來乍到,我也不太明白,由于python的各種歷史原因,python的內存處 理和線程管理非常復雜,打開源碼看看,如果出現類似object_new這樣的東西,那么他的內存就是用C++中的new來開辟的,如果是 object_malloc這樣的東西,則表示內存是用C中的malloc來實現的。
python屬于脫管型的語言,內存不需要我們手動處理,方便了很多,其實,python在底層是用自動引用計數器來實現的,python中創建小對象 時,往往直接在內存池中創建,而大對象則是使用new/malloc從內存中再創建一個。針對并不復雜的對象關系時,比如只有一個對象時,python是 不會運行鏈路檢測的,而如果對象很多,過系又很復雜,就會有一個鏈路檢測,以防出現循環引用和死循環的問題,當釋放內存時,則遵守自動引用計數的規則,非 常了不起。

來自:http://www.androiddev.net/python_sourcecode_study1/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!