python原始碼解析

2021-10-01 06:55:38 字數 934 閱讀 2038

demo資料夾裡放的是一些例子;

doc資料夾裡放的是文件,grammer是語法分析器,include是python所包含的一些標頭檔案,lib是python的庫,都是用python語言寫的,moduels是用c寫的python模組,parser是分詞器。是最生動的文字,現在我來附上我所理解的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是不會執行鏈路檢測的,而如果物件很多,過系又很複雜,就會有乙個鏈路檢測,以防出現迴圈引用和死迴圈的問題,當釋放記憶體時,則遵守自動引用計數的規則,非常了不起。

Python簡單原始碼解析

批量修改檔案型別 def batch rename work dir,old ext,new ext for filename in os.listdir work dir file ext os.path.splitext filename 1 if file ext old ext newfil...

Fabric 原始碼解析 原始碼目錄解析

這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...

Spring原始碼解析之 Aop原始碼解析(2)

spring aop 更多的是oop開發模式的乙個補充,幫助oop以更好的方式來解決對於需要解決業務功能模組之上統一管理 的功能 以一副圖來做為aop功能的說明更直觀些。對於類似系統的安全檢查,系統日誌,事務管理等相關功能,物件導向的開發方法並沒有更好的解決方法 aop引入了一些概念。更多的是spr...