15.0 序 在之前的章節中,我們考察的東西都是局限在一個模塊(在python中就是module)內。然而現實中,程序不可能只有一個模塊,更多情況下一個程序會有多個模塊,而模塊之間存在着引用和交互,這些引用和交互也是程序的一個重要的組成部分。本章剖析的就是在python中,一個模塊是如何加載 ...
楔子 上一篇我們介紹了生成器,本來這里應該介紹協程的,但是大致閱讀了一下,感覺如果從源碼的角度來介紹協程的話,工作量太大。而且個人精力有限,所以推薦我寫的這一篇博客:https: www.cnblogs.com traditional p .html,是用來介紹asyncio的,當然也從Python的角度介紹了Python中的協程。 這一次我們說一下Python模塊的加載機制,我們之前所考察的所有 ...
2020-09-06 06:30 3 630 推薦指數:
15.0 序 在之前的章節中,我們考察的東西都是局限在一個模塊(在python中就是module)內。然而現實中,程序不可能只有一個模塊,更多情況下一個程序會有多個模塊,而模塊之間存在着引用和交互,這些引用和交互也是程序的一個重要的組成部分。本章剖析的就是在python中,一個模塊是如何加載 ...
楔子 在上一章中,我們介紹了Python虛擬機中常見的字節碼指令。但我們的流程都是從上往下順序執行的,在執行的過程中沒有任何變化,但是顯然這是不夠的,因為怎么能沒有流程控制呢。下面我們來看看Python所提供的流程控制手段,其中也包括異常檢測機制。 Python虛擬機中的if控制流 ...
楔子 不少編程語言中的"字符串"都是使用字符數組(或者稱字符序列)來表示,比如C語言和go語言就是這樣。 一個字節最多能表示256個字符,所以對於英文來說足夠了,因此一個英文字符占一個字節即可 ...
楔子 當我們想要執行一個py文件的時候,只需要python xxx.py即可,但是你有沒有想過這背后的流程是怎么樣的呢?從這里開始我們就開始進入到Python虛擬機的環節了,之前都是在介紹Python中的一些內置對象,不過虛擬機的執行流程、以及背后的原理卻更是值得我們關注的。 這里我們先來 ...
楔子 現在絕大部分的語言都實現了垃圾回收機制,這其中也包括Python,而不同的語言采用的垃圾回收算法也各不相同。那么,常見的垃圾回收算法都有哪些呢? 引用計數法(reference count): 記錄對象的被引用次數, 引用計數降為0時回收 標記-清除法(mark-sweep ...
楔子 Python的字典是一種映射型容器對象,保存了鍵(key)到值(value)的映射關系。通過字典,我們可以快速的實現值的查找,json這種數據結構也是借鑒了Python中的字典。而且字典在Python中是經過高度優化的,因為Python底層也在大量的使用字典這種數據結構。 那么這次 ...
楔子 在上一篇中我們說到了Python中的對象在底層的數據結構,我們知道Python底層通過PyObject和PyTypeObject完成了C++所提供的對象的多態特性。在Python中創建一個對象,會分配內存並進行初始化,然后Python會用一個PyObject *來保存和維護這個對象 ...
楔子 這次我們來分析一下Python中的整數是如何實現的,我們知道Python中的整數是不會溢出的,換句話說,它可以計算無窮大的數。只要你的內存足夠,它就能計算,但是對於C來說顯然是不行的,可Python底層又是C實現的,那么它是怎么做到整數不會溢出的呢? 既然想知道答案,那么看一下 ...