Python源碼剖析

出版時間:2000-1  出版社:電子工業(yè)出版社  作者:陳儒  頁數(shù):480  
Tag標(biāo)簽:無  

內(nèi)容概要

  作為主流的動態(tài)語言,Python不僅簡單易學(xué)、移植性好,而且擁有強大豐富的庫的支持。此外,Python強大的可擴展性,讓開發(fā)人員既可以非常容易地利用C/C++編寫Python的擴展模塊,還能將Python嵌入到C/C++程序中,為自己的系統(tǒng)添加動態(tài)擴展和動態(tài)編程的能力?! 榱烁玫乩肞ython語言,無論是使用Python語言本身,還是將Python與C/C++交互使用,深刻理解Python的運行原理都是非常重要的。本書以CPython為研究對象,在C代碼一級,深入細致地剖析了Python的實現(xiàn)。書中不僅包括了對大量Python內(nèi)置對象的剖析,更將大量的篇幅用于對Python虛擬機及Python高級特性的剖析。通過此書,讀者能夠透徹地理解Python中的一般表達式、控制結(jié)構(gòu)、異常機制、類機制、多線程機制、模塊的動態(tài)加載機制、內(nèi)存管理機制等核心技術(shù)的運行原理,同時,本書所揭示的動態(tài)語言的核心技術(shù)對于理解其他動態(tài)語言,如Javascript、Ruby等也有較大的參考價值?! ”緯m合于Python程序員、動態(tài)語言愛好者、C程序員閱讀。

書籍目錄

第0章 PYTHON源碼剖析--編譯PYTHON0.1 PYTHON總體架構(gòu)0.2 PYTHON源代碼的組織0.3 WINDOWS環(huán)境下編譯PYTHON0.4 UNIX/LINUX環(huán)境下編譯PYTHON0.5 修改PYTHON源代碼0.6 通往PYTHON之路0.7 一些注意事項第1部分 PYTHON內(nèi)建對象第1章 PYTHON對象初探1.1 PYTHON內(nèi)的對象1.1.1 對象機制的基石——PyObject1.1.2 定長對象和變長對象1.2 類型對象1.2.1 對象的創(chuàng)建1.2.2 對象的行為1.2.3 類型的類型1.3 PYTHON對象的多態(tài)性1.4 引用計數(shù)1.5 PYTHON對象的分類第2章 PYTHON中的整數(shù)對象2.1 初識PYINTOBJECT對象2.2 PYINTOBJECT對象的創(chuàng)建和維護2.2.1 對象創(chuàng)建的3種途徑2.2.2 小整數(shù)對象2.2.3 大整數(shù)對象2.2.4 添加和刪除2.2.5 小整數(shù)對象池的初始化2.3 HACK PYINTOBJECT第3章 PYTHON中的字符串對象3.1 PYSTRINGOBJECT與PYSTRING_TYPE3.2 創(chuàng)建PYSTRINGOBJECT對象3.3 字符串對象的INTERN機制3.4 字符緩沖池3.5 PYSTRINGOBJECT效率相關(guān)問題3.6 HACK PYSTRINGOBJECT第4章 PYTHON中的LIST對象4.1 PYLISTOBJECT對象4.2 PYLISTOBJECT對象的創(chuàng)建與維護4.2.1 創(chuàng)建對象4.2.2 設(shè)置元素4.2.3 插入元素4.2.4 刪除元素4.3 PYLISTOBJECT對象緩沖池4.4 HACK PYLISTOBJECT第5章 PYTHON中的DICT對象5.1 散列表概述5.2 PYDICTOBJECT5.2.1 關(guān)聯(lián)容器的entry5.2.2 關(guān)聯(lián)容器的實現(xiàn)5.3 PYDICTOBJECT的創(chuàng)建和維護5.3.1 PyDictObject對象創(chuàng)建5.3.2 PyDictObject中的元素搜索5.3.3 插入與刪除5.3.4 操作示例5.4 PYDICTOBJECT對象緩沖池5.5 HACK PYDICTOBJECT第6章 最簡單的PYTHON模擬——SMALL PYTHON6.1 SMALL PYTHON6.2 對象機制6.3 解釋過程6.4 交互式環(huán)境第2部分 PYTHON虛擬機第7章 PYTHON的編譯結(jié)果--CODE對象與PYC文件7.1 PYTHON程序的執(zhí)行過程7.2 PYTHON編譯器的編譯結(jié)果--PYCODEOBJECT對象7.2.1 PyCodeObject對象與pyc文件7.2.2 Python源碼中的PyCodeObject7.2.3 pyc文件7.2.4 在Python中訪問PyCodeObject對象7.3 PYC文件的生成7.3.1 創(chuàng)建pyc文件的具體過程7.3.2 向pyc文件寫入字符串7.3.3 一個PyCodeObject,多個PyCodeObject7.4 PYTHON的字節(jié)碼7.5 解析PYC文件第8章 PYTHON虛擬機框架8.1 PYTHON虛擬機中的執(zhí)行環(huán)境8.1.1 Python源碼中的PyFrameObject8.1.2 PyFrameObject中的動態(tài)內(nèi)存空間8.1.3 在Python中訪問PyFrameObject對象8.2 名字、作用域和名字空間8.2.1 Python程序的基礎(chǔ)結(jié)構(gòu)——module8.2.2 約束與名字空間8.2.3 作用域與名字空間8.3 PYTHON虛擬機的運行框架8.4 PYTHON運行時環(huán)境初探第9章 PYTHON虛擬機中的一般表達式9.1 簡單內(nèi)建對象的創(chuàng)建9.2 復(fù)雜內(nèi)建對象的創(chuàng)建9.3 其他一般表達式9.3.1 符號搜索9.3.2 數(shù)值運算9.3.3 信息輸出第10章 PYTHON虛擬機中的控制流10.1 PYTHON虛擬機中的IF控制流10.1.1 研究對象--if_control.py10.1.2 比較操作10.1.3 指令跳躍10.2 PYTHON虛擬機中的FOR循環(huán)控制流10.2.1 研究對象——for_control.py10.2.2 循環(huán)控制結(jié)構(gòu)的初始化10.2.3 迭代控制10.2.4 終止迭代10.3 PYTHON虛擬機中的WHILE循環(huán)控制結(jié)構(gòu)10.3.1 研究對象——while_control.py10.3.2 循環(huán)終止10.3.3 循環(huán)的正常運轉(zhuǎn)10.3.4 循環(huán)流程改變指令之continue10.3.5 循環(huán)流程改變指令之break10.4 PYTHON虛擬機中的異??刂屏?0.4.1 Python中的異常機制10.4.2 Python中的異??刂普Z義結(jié)構(gòu)第11章 PYTHON虛擬機中的函數(shù)機制11.1 PYFUNCTIONOBJECT對象11.2 無參函數(shù)調(diào)用11.2.1 函數(shù)對象的創(chuàng)建11.2.2 函數(shù)調(diào)用11.3 函數(shù)執(zhí)行時的名字空間11.4 函數(shù)參數(shù)的實現(xiàn)11.4.1 參數(shù)類別11.4.2 位置參數(shù)的傳遞11.4.3 位置參數(shù)的訪問11.4.4 位置參數(shù)的默認值11.4.5 擴展位置參數(shù)和擴展鍵參數(shù)11.5 函數(shù)中局部變量的訪問11.6 嵌套函數(shù)、閉包與DECORATOR11.6.1 實現(xiàn)閉包的基石11.6.2 閉包的實現(xiàn)11.6.3 Decorator第12章 PYTHON虛擬機中的類機制12.1 PYTHON中的對象模型12.1.1 對象間的關(guān)系12.1.2 和12.2 從TYPE對象到CLASS對象12.2.1 處理基類和type信息12.2.2 處理基類列表12.2.3 填充tp_dict12.3 用戶自定義CLASS12.3.1 創(chuàng)建class對象12.4 從CLASS對象到INSTANCE對象12.5 訪問INSTANCE對象中的屬性12.5.1 instance對象中的__dict__12.5.2 再論descriptor12.5.3 函數(shù)變身12.5.4 無參函數(shù)的調(diào)用12.5.5 帶參函數(shù)的調(diào)用12.5.6 Bound Method和Unbound Method12.6 千變?nèi)f化的DESCRIPTOR第3部分 PYTHON高級話題第13章 PYTHON運行環(huán)境初始化13.1 線程環(huán)境初始化13.1.1 線程模型回顧13.1.2 初始化線程環(huán)境13.2 系統(tǒng)MODULE初始化13.2.1 創(chuàng)建__builtin__ module13.2.2 創(chuàng)建sys module13.2.3 創(chuàng)建__main__ module13.2.4 設(shè)置site-specific的module的搜索路徑13.3 激活PYTHON虛擬機13.3.1 交互式運行方式13.3.2 腳本文件運行方式13.3.3 啟動虛擬機13.3.4 名字空間第14章 PYTHON模塊的動態(tài)加載機制14.1 IMPORT前奏曲14.2 PYTHON中IMPORT機制的黑盒探測14.2.1 標(biāo)準(zhǔn)import14.2.2 嵌套import14.2.3 import package14.2.4 from與import14.2.5 符號重命名14.2.6 符號的銷毀與重載14.3 IMPORT機制的實現(xiàn)14.3.1 解析module/package樹狀結(jié)構(gòu)14.3.2 加載module/pakcage14.3.3 from與import14.4 PYTHON中的IMPORT操作14.4.1 import module14.4.2 import package14.4.3 from & import14.4.4 import & as14.4.5 reload14.4.6 內(nèi)建module:imp14.5 與MODULE有關(guān)的名字空間問題第15章 PYTHON多線程機制15.1 GIL與線程調(diào)度15.2 初見PYTHON THREAD15.3 PYTHON線程的創(chuàng)建15.3.1 建立多線程環(huán)境15.3.2 創(chuàng)建線程15.4 PYTHON線程的調(diào)度15.4.1 標(biāo)準(zhǔn)調(diào)度15.4.2 阻塞調(diào)度15.5 PYTHON子線程的銷毀15.6 PYTHON線程的用戶級互斥與同步15.6.1 用戶級互斥與同步15.6.2 Lock對象15.7 高級線程庫——THREADING15.7.1 Threading Module概述15.7.2 Threading的線程同步工具15.7.3 Threading中的Thread第16章 PYTHON的內(nèi)存管理機制16.1 內(nèi)存管理架構(gòu)16.2 小塊空間的內(nèi)存池16.2.1 Block16.2.2 Pool16.2.3 arena16.2.4 內(nèi)存池16.3 循環(huán)引用的垃圾收集16.3.1 引用計數(shù)與垃圾收集16.3.2 三色標(biāo)記模型16.4 PYTHON中的垃圾收集16.4.1 可收集對象鏈表16.4.2 分代的垃圾收集16.4.3 Python中的標(biāo)記-清除方法16.4.4 垃圾收集全景16.4.5 Python中的gc模塊16.4.6 總結(jié)

章節(jié)摘錄

  第1章 Python對象初探  對象是Python中最核心的一個概念,在Python的世界中,一切都是對象,一個整數(shù)是一個對象,一個字符串也是一個對象。更為奇妙的是,類型也是一種對象,整數(shù)類型是一個對象,字符串類型也是一個對象。換句話說,面向?qū)ο罄碚撝械摹邦悺焙汀皩ο蟆边@兩個概念在Python中都是通過Python內(nèi)的對象來實現(xiàn)的?! ≡赑ython中,已經(jīng)預(yù)先定義了一些類型對象,比如int類型、string類型、dict類型等,這些我們稱之為內(nèi)建類型對象。這些類型對象實現(xiàn)了面向?qū)ο笾小邦悺钡母拍?;這些內(nèi)建類型對象通過“實例化”,可以創(chuàng)建內(nèi)建類型對象的實例對象,比如int對象、string對象、dict對象。類似的,這些實例對象可以視為面向?qū)ο罄碚撝小皩ο蟆边@個概念在Python中的體現(xiàn)?! ⊥瑫r,Python還允許程序員通過class A(object)這樣的表達式自己定義類型對象?;谶@些類型對象,同樣可以進行“實例化”的操作,創(chuàng)建的對象稱為“實例對象”。Python中不光有著這些千差萬別的對象,這些對象之間還存在著各種復(fù)雜的關(guān)系,從而構(gòu)成了我們稱之為“類型系統(tǒng)”或“對象體系”的東西?! ython中的對象體系是一個龐大而復(fù)雜的體系,如果說在本書的第一章我就試圖將這個體系闡釋清楚,這只能說明我是個瘋子。在本章中,我們的重點將放在了解對象在Python內(nèi)部是如何表示的,更確切地說,因為Python是由C實現(xiàn)的,所以我們首先要弄清楚的一個問題就是:對象,這個神奇的東西,在C的層面,究竟長得是個什么模樣,究竟是三頭六臂,還是烈焰紅唇?! 〕酥猓覀冞€將了解到類型對象在C的層面是如何實現(xiàn)的,并初步認識類型對象的作用及它與實例對象的關(guān)系??傊?,本章對Python對象體系的介紹力求簡潔,但是并不膚淺,有的地方甚至?xí)喈?dāng)深入。因此,在本章的閱讀中,如果有什么疑難的地方,沒有關(guān)系,先放下,只要有一個直觀的感覺就可以了,這并不妨礙你閱讀接下來的內(nèi)容?! ”菊碌哪康氖菫槟軌蝽樌焖俚剡M入對內(nèi)建對象的剖析打下必要的基礎(chǔ),至于對Python對象體系的詳細剖析,會在第2部分的最后一章中介紹到。只有到了那個時候,我們才有足夠的能力將這個體系看個明白?! ?.1 Python內(nèi)的對象  從1989年Guido在圣誕節(jié)揭開Python的大幕開始,一直到現(xiàn)在,Python經(jīng)歷了一次一次的升級,但是其實現(xiàn)語言一直都是ANSI C。我們知道,C并不是一個面向?qū)ο蟮恼Z言,那么在Python中,它的對象機制是如何實現(xiàn)的呢?  對于人的思維來說,對象是一個比較形象的概念,而對于計算機來說,對象卻是一個抽象的概念。它并不能理解這是一個整數(shù),那是一個字符串,對于計算機來說,它所知道的一切都是字節(jié)。通常的說法是,對象是數(shù)據(jù)以及基于這些數(shù)據(jù)的操作的集合。在計算機中,一個對象實際上就是一片被分配的內(nèi)存空間,這些內(nèi)存可能是連續(xù)的,也可能是離散的,這都不重要,重要的是這片內(nèi)存在更高的層次上可以作為一個整體來考慮,這個整體就是一個對象。在這片內(nèi)存中,存儲著一系列的數(shù)據(jù)以及可以對這些數(shù)據(jù)進行修改或讀取操作的一系列代碼?! ≡赑ython中,對象就是為C中的結(jié)構(gòu)體在堆上申請的一塊內(nèi)存,一般來說,對象是不能被靜態(tài)初始化的,并且也不能在棧空間上生存。唯一的例外就是類型對象,Python中所有的內(nèi)建的類型對象(如整數(shù)類型對象,字符串類型對象)都是被靜態(tài)初始化的?! ≡赑ython中,一個對象一旦被創(chuàng)建,它在內(nèi)存中的大小就是不變的了。這就意味著那些需要容納可變長度數(shù)據(jù)的對象只能在對象內(nèi)維護一個指向一塊可變大小的內(nèi)存區(qū)域的指針。為什么要設(shè)定這樣一條特殊的規(guī)則呢,因為遵循這樣的規(guī)則可以使通過指針維護對象的工作變得非常的簡單。一旦允許對象的大小可在運行期改變,我們就可以考慮如下的情形。在內(nèi)存中有對象A,并且其后緊跟著對象B。如果運行期某個時刻,A的大小增大了,這意味著必須將A整個移動到內(nèi)存中的其他位置,否則A增大的部分將覆蓋原本屬于B的數(shù)據(jù)。只要將A移動到內(nèi)存中的其他位置,那么所有指向A的指針就必須立即得到更新,光是想一想,就知道這樣的工作是多么的繁瑣。

編輯推薦

  《Python源碼剖析:深度探索動態(tài)語言核心技術(shù)》適合于Python程序員、動態(tài)語言愛好者、C程序員閱讀?! ∽鳛橹髁鞯膭討B(tài)語言,Python不僅簡單易學(xué)、移植性好,而且擁有強大豐富的庫的支持。此外,Python強大的可擴展性,讓開發(fā)人員既可以非常容易地利用C/C++編寫Python的擴展模塊,還能將Python嵌入到C/C++程序中,為自己的系統(tǒng)添加動態(tài)擴展和動態(tài)編程的能力?! 榱烁玫乩肞ython語言,無論是使用Python語言本身,還是將Python與C/C++交互使用,深刻理解Python的運行原理都是非常重要的。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    Python源碼剖析 PDF格式下載


用戶評論 (總計0條)

 
 

 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7