內容簡介
本書將幫助讀者系統掌握編寫高效、優雅的
Python代碼的方法,快速成長為一位高水平的Python開發工程師。
作者是Python編程領域的資深開發工程師,有多年的Python開發經驗。本書得到了行業里15位技術專家的高度評價。
為了幫助讀者編寫出高效的Python代碼,本書不僅從原始碼的角度系統地講解了Python的語法,讓讀者能知其然並知其所以然,而且結合具體的套用需求,對並發編程、性能最佳化、測試與調試、異常處理、記憶體管理等Python開發中的高級知識進行了詳細的講解。
為了指導讀者編寫出更優雅的Python代碼,本書針對具體問題給出了大量的實例代碼並給出了編碼風格上的方法和建議。
如果你是沒有Python編程經驗的新人,將通過本書系統掌握Python語法及其背後的原理,並從一開始就養成良好的編碼習慣;如果你是有一定Python編程經驗的老手,將通過本書掌握各淚主邀種Python編程中的高級知識,同時領略到優雅的編碼風格和技巧。
本書共17章,各章內容安排如下。
第0章講解Python的整體架構及源碼組織形式,使讀者對Python的實現有一個巨觀的認識。
第1章討論數字相關主題。
第2章講解字元串的基礎操作,如提取字元串、搜尋、替換以及解析等。
第3章講解Python中內置的數據結構,如列表、字典以及集合等。
第4章講解Python中疊代對象的處理。
第5章講解不同類型的檔案處理。
第6章講解使用Python處理不同編碼格式的數據。
第7章講解一些高級、不常見的函式定義與使用模式。
第8章講解和類定義有關的常見編程模型。
第9章介紹元編程技術,並且通過示例展示如何利用該技術陵臘蜜鴉定製源碼行為。厚兆勸
第10章講解模組和包的常用編程技術,包括如何組織包,如何把大型模組分割成多個文淋船翻件,如何創建命名空間包。
第11章講解如何使用Python編寫客戶端程式來訪問已有的服務,以及如何使用Python實現網路服務端程式。
第12章捉臭整斷講解並發編程的各種方法與技巧,包括通用循試悼的多執行緒技術以及並行計算的實現方法。
第13章講解編寫腳本時經常用到的一些功能,如解析命令行選項以及獲取有用的系統配置數據等。
第14章討論測試、調試和異常處理的常見問題。
第15章講解Python中的記憶體管理機制。
第16章講解提升Python運行效率的方法與實踐。
圖書目錄
推薦語
推薦序一
推薦序二
前言
第0章 Python總覽 1
0.1 Python總體架構寒訂 1
0.2 Python源碼組織 2
0.3 Python對象初探 3
0.3.1 Python內的對象 3
0.3.2 對象的分類 4
0.3.3 對象機制的基石—PyObject 5
0.3.4 定長對象和變長對象 5
0.3.5 類型對象 6
0.3.6 類型的類型 7
0.3.7 對象的創建 8
0.3.8 對象的行為 8
0.3.9 對象的多態性 9
0.3.10 引用計數 10
0.4 本章小結 11
第1章 數字對象 12
1.1 整數對象 12
1.1.1 PyLongObject對象 12
1.1.2 小整數對象 14
1.1.3 大整數對象 14
1.2 數字格式化輸出 14
1.3 進制轉換 16
1.4 數字運算 17
1.4.1 四捨五入運算 17
1.4.2 浮點數運算 19
1.4.3 複數運算 20
1.4.4 分數運算 22
1.4.5 大型數組運算 22
1.4.6 矩陣與線性代數運算 25
1.5 位元組到大整數的打包與解包 27
1.6 無窮大與NaN 28
1.7 隨機數 30
1.8 本章小結 32
第2章 字元串 33
2.1 字元串對象解析 33
2.1.1 字元串對象的intern機制 33
2.1.2 字元串操作效率 34
2.2 字元串操作 35
2.2.1 字元串分割 35
2.2.2 刪除不需要的字元 36
2.2.3 字元串清理 37
2.2.4 字元串對齊 39
2.2.5 字元串拼接 40
2.2.6 字元串插入 42
2.2.7 字元串格式化 43
2.2.8 處理HTML和XML文本 43
2.3 字元串匹配 44
2.3.1 字元串開頭或結尾匹配 44
2.3.2 用Shell通配符匹配字元串 46
2.3.3 字元串匹配和搜尋 47
2.3.4 最短匹配 49
2.3.5 多行匹配 50
2.4 字元串搜尋 50
2.4.1 字元串搜尋替換 50
2.4.2 字元串忽略大小寫的搜尋替換 51
2.5 將Unicode文本標準化 52
2.6 在正則表達式中使用Unicode字元 54
2.7 令牌解析 55
2.8 簡單的遞歸下降分析器實現 57
2.9 位元組字元串操作 64
2.10 本章小結 66
第3章 數據結構 67
3.1 序列 67
3.1.1 序列對象解析 67
3.1.2 序列解壓 68
3.1.3 序列去重並保持順序 70
3.1.4 序列元素統計 71
3.1.5 過濾序列元素 72
3.1.6 序列元素名稱映射 74
3.1.7 轉換並計算數據 76
3.2 字典 77
3.2.1 字典對象解析 77
3.2.2 字典映射 79
3.2.3 字典排序 81
3.2.4 字典運算 81
3.2.5 字典查找 83
3.2.6 通過關鍵字排序字典 84
3.2.7 字典提取 85
3.2.8 字典合併 86
3.3 可疊代對象操作 88
3.3.1 可疊代對象解壓 88
3.3.2 保留最後N個元素 89
3.3.3 記錄分組 90
3.4 查找最大或最小的N個元素 91
3.5 實現一個優先權佇列 92
3.6 命名切片 95
3.7 排序不支持原生比較的對象 96
3.8 本章小結 97
第4章 疊代器與生成器 98
4.1 疊代操作 98
4.1.1 手動遍歷疊代器 98
4.1.2 代理疊代 99
4.1.3 實現疊代協定 100
4.1.4 反向疊代 102
4.1.5 疊代器切片 104
4.1.6 跳過可疊代對象的開始部分 104
4.1.7 排列組合的疊代 106
4.1.8 序列上索引值疊代 107
4.1.9 多個序列疊代 109
4.1.10 集合元素的疊代 111
4.1.11 順序疊代合併後的排序疊代對象 112
4.1.12 疊代器代替while無限循環 113
4.2 使用生成器創建新的疊代模式 113
4.3 帶有外部狀態的生成器函式 115
4.4 創建數據處理管道 116
4.5 展開嵌套的序列 118
4.6 本章小結 120
第5章 檔案與I/O 121
5.1 讀/寫操作 121
5.1.1 讀/寫文本數據 121
5.1.2 讀/寫位元組數據 123
5.1.3 讀/寫壓縮檔案 124
5.2 檔案操作 126
5.2.1 檔案的寫入 126
5.2.2 操作檔案路徑名 126
5.2.3 檔案檢查 127
5.2.4 檔案列表獲取 128
5.2.5 忽略檔案名稱編碼 129
5.2.6 列印不合法的檔案名稱 130
5.2.7 檔案編碼變更 132
5.2.8 在文本檔案中寫入位元組 133
5.2.9 檔案描述符包裝 134
5.2.10 創建臨時檔案和資料夾 135
5.2.11 檔案疊代 137
5.2.12 二進制檔案映射 137
5.3 使用分隔設定或行終止符列印 139
5.4 字元串的I/O操作 140
5.5 可變緩衝區中二進制數據的讀取 141
5.6 串列連線埠的數據通信 143
5.7 對象序列化 143
5.8 本章小結 146
第6章 數據編碼及處理 147
6.1 數據讀/寫 147
6.1.1 CSV數據讀/寫 147
6.1.2 JSON數據讀/寫 151
6.1.3 二進制數組數據讀/寫 155
6.1.4 嵌套和可變長二進制數據讀取 158
6.2 XML數據解析 166
6.2.1 簡單XML數據解析 166
6.2.2 解析XML文檔 167
6.2.3 修改XML 169
6.3 字典轉換為XML 170
6.4 與關係型資料庫的互動 172
6.5 編碼/解碼 174
6.5.1 十六進制數編碼和解碼 174
6.5.2 編碼/解碼Base64數據 175
6.6 本章小結 176
第7章 函式 177
7.1 函式定義 177
7.1.1 有默認參數的函式定義 177
7.1.2 匿名或內聯函式定義 180
7.2 函式的參數 181
7.2.1 接收任意數量參數 181
7.2.2 接收關鍵字參數 183
7.2.3 為參數增加元信息 184
7.2.4 減少參數個數 185
7.3 返回多個值的函式 187
7.4 變數處理 188
7.4.1 匿名函式捕獲變數值 188
7.4.2 訪問閉包中定義的變數 190
7.5 類轉換為函式 192
7.6 回調函式 193
7.6.1 有額外狀態信息的回調函式 193
7.6.2 內聯回調函式 196
7.7 本章小結 198
第8章 類與對象 199
8.1 對象處理 199
8.1.1 對象顯示 199
8.1.2 有效創建大量對象 200
8.1.3 由字元串調用對象 201
8.2 自定義格式化字元串 202
8.3 上下文管理協定 203
8.4 類的處理 205
8.4.1 封裝屬性名 205
8.4.2 調用父類方法 207
8.4.3 擴展property 213
8.4.4 創建新的類或實例屬性 217
8.4.5 定義多個構造器 219
8.4.6 類中的比較操作 220
8.5 屬性處理 222
8.5.1 可管理屬性創建 222
8.5.2 延遲計算屬性 226
8.5.3 屬性的代理訪問 229
8.6 數據結構的初始化 233
8.7 接口或者抽象基類定義 236
8.8 數據模型的類型約束 238
8.9 自定義容器 243
8.10 不調用init方法的實例創建 246
8.11 利用Mixin擴展類功能 247
8.12 狀態對象實現 249
8.13 設計模式處理 252
8.13.1 訪問者模式 252
8.13.2 不用遞歸實現訪問者模式 255
8.14 數據結構的記憶體管理 259
8.15 創建快取 262
8.16 本章小結 266
第9章 元編程 267
9.1 裝飾器 267
9.1.1 函式添加裝飾器 267
9.1.2 裝飾器中保留函式元信息 269
9.1.3 解除裝飾器 271
9.1.4 帶參數的裝飾器 272
9.1.5 裝飾器自定義屬性 273
9.1.6 帶可選參數的裝飾器 276
9.1.7 函式的類型檢查 278
9.1.8 類中定義裝飾器 281
9.1.9 裝飾器定義為類 282
9.1.10 類和靜態方法的裝飾器 285
9.1.11 給函式增加參數 287
9.1.12 擴充類的功能 289
9.2 元類 291
9.2.1 控制實例創建 291
9.2.2 元類定義可選參數 293
9.3 類的屬性定義順序 295
9.4 強制參數簽名 297
9.5 強制使用編程規約 300
9.6 以編程方式定義類 303
9.7 初始化類的成員 306
9.8 利用註解實現方法重載 307
9.9 避免重複的屬性方法 313
9.10 定義上下文管理器 314
9.11 局部變數域中執行代碼 316
9.12 Python源碼解析 319
9.13 Python位元組碼拆解 322
9.14 本章小結 324
第10章 模組與包 325
10.1 模組處理 325
10.1.1 模組層級 325
10.1.2 控制模組的導入 326
10.1.3 重新載入模組 327
10.1.4 通過字元串名導入模組 328
10.1.5 遠程載入模組 329
10.1.6 導入模組的同時修改模組 346
10.2 讀取包中的數據檔案 348
10.3 將資料夾加入sys.path 349
10.4 安裝私有的包 350
10.5 創建新的Python環境 350
10.6 分發包 352
10.7 本章小結 353
第11章 網路編程 354
11.1 與HTTP服務互動 354
11.2 創建伺服器 357
11.2.1 TCP伺服器 357
11.2.2 UDP伺服器 360
11.3 通過CIDR地址生成對應的IP位址集 361
11.4 REST接口創建 363
11.5 遠程調用 367
11.5.1 遠程方法調用 367
11.5.2 通過XML-RPC遠程調用 371
11.6 不同Python解釋器之間的互動 373
11.7 客戶端認證 374
11.8 Socket檔案描述符傳遞 376
11.9 事件驅動的I/O 380
11.10 大型數組傳送與接收 385
11.11 本章小結 387
第12章 並發編程 388
12.1 執行緒處理 388
12.1.1 執行緒的啟動與停止 388
12.1.2 執行緒判斷 391
12.1.3 執行緒間通信 394
12.1.4 執行緒加鎖 398
12.1.5 防止死鎖 401
12.1.6 執行緒狀態信息保存 404
12.1.7 創建執行緒池 405
12.2 並行編程 408
12.3 全局鎖問題 412
12.4 Actor任務定義 414
12.5 訊息發布/訂閱模型 417
12.6 生成器代替執行緒 420
12.7 執行緒佇列輪詢 427
12.8 守護進程 429
12.9 本章小結 432
第13章 腳本編程與系統管理 433
13.1 腳本接收 433
13.2 終止程式 434
13.3 解析命令行選項 434
13.4 彈出密碼輸入提示 436
13.5 執行外部命令 437
13.6 檔案操作 439
13.6.1 檔案和目錄的複製或移動 439
13.6.2 創建和解壓歸檔檔案 440
13.6.3 檔案查找 441
13.6.4 配置檔案讀取 442
13.7 添加日誌 444
13.7.1 腳本增加日誌功能 444
13.7.2 函式館增加日誌功能 446
13.8 實現計時器 447
13.9 記憶體和CPU監測 449
13.10 啟動Web瀏覽器 450
13.11 本章小結 451
第14章 測試、調試和異常 452
14.1 測試 452
14.1.1 stdout輸出 452
14.1.2 對象打補丁 453
14.1.3 測試異常 455
14.1.4 記錄測試結果 457
14.1.5 性能測試 458
14.1.6 測試失敗處理 460
14.2 異常處理 461
14.2.1 捕獲所有異常 461
14.2.2 處理多個異常 462
14.2.3 自定義異常 464
14.2.4 拋出新的異常 466
14.2.5 異常重新拋出 468
14.2.6 警告信息 468
14.3 程式調試 470
14.4 加速程式運行 472
14.5 實戰—自然語言處理 476
14.6 本章小結 502
第15章 Python的記憶體管理機制 503
15.1 Python記憶體架構 503
15.2 小塊空間的記憶體池 505
15.2.1 block 505
15.2.2 pool 506
15.2.3 arena 506
15.2.4 記憶體池 507
15.3 循環引用的垃圾收集 509
15.3.1 引用計數與垃圾收集 509
15.3.2 三色標記模型 510
15.4 Python垃圾收集 511
15.4.1 可收集對象鍊表 511
15.4.2 分代垃圾收集 513
15.4.3 Python中的標記—清除方法 514
15.5 實戰——記憶體監控 516
15.6 本章小結 520
第16章 性能最佳化與實踐 521
16.1 最佳化的規則 521
16.1.1 先使程式可以正常工作 521
16.1.2 從用戶的角度進行 522
16.1.3 保證代碼易讀 522
16.2 最佳化策略 523
16.2.1 尋找其他原因 523
16.2.2 度量硬體 523
16.2.3 編寫速度測試代碼 523
16.3 查找瓶頸 524
16.3.1 剖析CPU使用情況 524
16.3.2 剖析記憶體使用情況 528
16.4 降低複雜度 530
16.4.1 測量迴路複雜度 530
16.4.2 測量大O記號 530
16.4.3 簡化 531
16.5 實戰——爬蟲程式的性能最佳化 532
16.6 本章小結 537
作者簡介
劉宇宙
資深開發工程師,就職於一家知名的頭部人工智慧企業,從事Python開發多年,積累了豐富的經驗。
先後從事卡系統、IaaS平台、大數據系統、物聯網系統、網路爬蟲軟體、圖像處理和自然語言處理相關的項目的研發,現從事人工智慧平台的研發。
出版過多部Python編程和數據分析方面的著作,深受讀者歡迎。
0.3.4 定長對象和變長對象 5
0.3.5 類型對象 6
0.3.6 類型的類型 7
0.3.7 對象的創建 8
0.3.8 對象的行為 8
0.3.9 對象的多態性 9
0.3.10 引用計數 10
0.4 本章小結 11
第1章 數字對象 12
1.1 整數對象 12
1.1.1 PyLongObject對象 12
1.1.2 小整數對象 14
1.1.3 大整數對象 14
1.2 數字格式化輸出 14
1.3 進制轉換 16
1.4 數字運算 17
1.4.1 四捨五入運算 17
1.4.2 浮點數運算 19
1.4.3 複數運算 20
1.4.4 分數運算 22
1.4.5 大型數組運算 22
1.4.6 矩陣與線性代數運算 25
1.5 位元組到大整數的打包與解包 27
1.6 無窮大與NaN 28
1.7 隨機數 30
1.8 本章小結 32
第2章 字元串 33
2.1 字元串對象解析 33
2.1.1 字元串對象的intern機制 33
2.1.2 字元串操作效率 34
2.2 字元串操作 35
2.2.1 字元串分割 35
2.2.2 刪除不需要的字元 36
2.2.3 字元串清理 37
2.2.4 字元串對齊 39
2.2.5 字元串拼接 40
2.2.6 字元串插入 42
2.2.7 字元串格式化 43
2.2.8 處理HTML和XML文本 43
2.3 字元串匹配 44
2.3.1 字元串開頭或結尾匹配 44
2.3.2 用Shell通配符匹配字元串 46
2.3.3 字元串匹配和搜尋 47
2.3.4 最短匹配 49
2.3.5 多行匹配 50
2.4 字元串搜尋 50
2.4.1 字元串搜尋替換 50
2.4.2 字元串忽略大小寫的搜尋替換 51
2.5 將Unicode文本標準化 52
2.6 在正則表達式中使用Unicode字元 54
2.7 令牌解析 55
2.8 簡單的遞歸下降分析器實現 57
2.9 位元組字元串操作 64
2.10 本章小結 66
第3章 數據結構 67
3.1 序列 67
3.1.1 序列對象解析 67
3.1.2 序列解壓 68
3.1.3 序列去重並保持順序 70
3.1.4 序列元素統計 71
3.1.5 過濾序列元素 72
3.1.6 序列元素名稱映射 74
3.1.7 轉換並計算數據 76
3.2 字典 77
3.2.1 字典對象解析 77
3.2.2 字典映射 79
3.2.3 字典排序 81
3.2.4 字典運算 81
3.2.5 字典查找 83
3.2.6 通過關鍵字排序字典 84
3.2.7 字典提取 85
3.2.8 字典合併 86
3.3 可疊代對象操作 88
3.3.1 可疊代對象解壓 88
3.3.2 保留最後N個元素 89
3.3.3 記錄分組 90
3.4 查找最大或最小的N個元素 91
3.5 實現一個優先權佇列 92
3.6 命名切片 95
3.7 排序不支持原生比較的對象 96
3.8 本章小結 97
第4章 疊代器與生成器 98
4.1 疊代操作 98
4.1.1 手動遍歷疊代器 98
4.1.2 代理疊代 99
4.1.3 實現疊代協定 100
4.1.4 反向疊代 102
4.1.5 疊代器切片 104
4.1.6 跳過可疊代對象的開始部分 104
4.1.7 排列組合的疊代 106
4.1.8 序列上索引值疊代 107
4.1.9 多個序列疊代 109
4.1.10 集合元素的疊代 111
4.1.11 順序疊代合併後的排序疊代對象 112
4.1.12 疊代器代替while無限循環 113
4.2 使用生成器創建新的疊代模式 113
4.3 帶有外部狀態的生成器函式 115
4.4 創建數據處理管道 116
4.5 展開嵌套的序列 118
4.6 本章小結 120
第5章 檔案與I/O 121
5.1 讀/寫操作 121
5.1.1 讀/寫文本數據 121
5.1.2 讀/寫位元組數據 123
5.1.3 讀/寫壓縮檔案 124
5.2 檔案操作 126
5.2.1 檔案的寫入 126
5.2.2 操作檔案路徑名 126
5.2.3 檔案檢查 127
5.2.4 檔案列表獲取 128
5.2.5 忽略檔案名稱編碼 129
5.2.6 列印不合法的檔案名稱 130
5.2.7 檔案編碼變更 132
5.2.8 在文本檔案中寫入位元組 133
5.2.9 檔案描述符包裝 134
5.2.10 創建臨時檔案和資料夾 135
5.2.11 檔案疊代 137
5.2.12 二進制檔案映射 137
5.3 使用分隔設定或行終止符列印 139
5.4 字元串的I/O操作 140
5.5 可變緩衝區中二進制數據的讀取 141
5.6 串列連線埠的數據通信 143
5.7 對象序列化 143
5.8 本章小結 146
第6章 數據編碼及處理 147
6.1 數據讀/寫 147
6.1.1 CSV數據讀/寫 147
6.1.2 JSON數據讀/寫 151
6.1.3 二進制數組數據讀/寫 155
6.1.4 嵌套和可變長二進制數據讀取 158
6.2 XML數據解析 166
6.2.1 簡單XML數據解析 166
6.2.2 解析XML文檔 167
9.1.9 裝飾器定義為類 282
9.1.10 類和靜態方法的裝飾器 285
9.1.11 給函式增加參數 287
9.1.12 擴充類的功能 289
9.2 元類 291
9.2.1 控制實例創建 291
9.2.2 元類定義可選參數 293
9.3 類的屬性定義順序 295
9.4 強制參數簽名 297
9.5 強制使用編程規約 300
9.6 以編程方式定義類 303
9.7 初始化類的成員 306
9.8 利用註解實現方法重載 307
9.9 避免重複的屬性方法 313
9.10 定義上下文管理器 314
9.11 局部變數域中執行代碼 316
9.12 Python源碼解析 319
9.13 Python位元組碼拆解 322
9.14 本章小結 324
第10章 模組與包 325
10.1 模組處理 325
10.1.1 模組層級 325
10.1.2 控制模組的導入 326
10.1.3 重新載入模組 327
10.1.4 通過字元串名導入模組 328
10.1.5 遠程載入模組 329
10.1.6 導入模組的同時修改模組 346
10.2 讀取包中的數據檔案 348
10.3 將資料夾加入sys.path 349
10.4 安裝私有的包 350
10.5 創建新的Python環境 350
10.6 分發包 352
10.7 本章小結 353
第11章 網路編程 354
11.1 與HTTP服務互動 354
11.2 創建伺服器 357
11.2.1 TCP伺服器 357
11.2.2 UDP伺服器 360
11.3 通過CIDR地址生成對應的IP位址集 361
11.4 REST接口創建 363
11.5 遠程調用 367
11.5.1 遠程方法調用 367
11.5.2 通過XML-RPC遠程調用 371
11.6 不同Python解釋器之間的互動 373
11.7 客戶端認證 374
11.8 Socket檔案描述符傳遞 376
11.9 事件驅動的I/O 380
11.10 大型數組傳送與接收 385
11.11 本章小結 387
第12章 並發編程 388
12.1 執行緒處理 388
12.1.1 執行緒的啟動與停止 388
12.1.2 執行緒判斷 391
12.1.3 執行緒間通信 394
12.1.4 執行緒加鎖 398
12.1.5 防止死鎖 401
12.1.6 執行緒狀態信息保存 404
12.1.7 創建執行緒池 405
12.2 並行編程 408
12.3 全局鎖問題 412
12.4 Actor任務定義 414
12.5 訊息發布/訂閱模型 417
12.6 生成器代替執行緒 420
12.7 執行緒佇列輪詢 427
12.8 守護進程 429
12.9 本章小結 432
第13章 腳本編程與系統管理 433
13.1 腳本接收 433
13.2 終止程式 434
13.3 解析命令行選項 434
13.4 彈出密碼輸入提示 436
13.5 執行外部命令 437
13.6 檔案操作 439
13.6.1 檔案和目錄的複製或移動 439
13.6.2 創建和解壓歸檔檔案 440
13.6.3 檔案查找 441
13.6.4 配置檔案讀取 442
13.7 添加日誌 444
13.7.1 腳本增加日誌功能 444
13.7.2 函式館增加日誌功能 446
13.8 實現計時器 447
13.9 記憶體和CPU監測 449
13.10 啟動Web瀏覽器 450
13.11 本章小結 451
第14章 測試、調試和異常 452
14.1 測試 452
14.1.1 stdout輸出 452
14.1.2 對象打補丁 453
14.1.3 測試異常 455
14.1.4 記錄測試結果 457
14.1.5 性能測試 458
14.1.6 測試失敗處理 460
14.2 異常處理 461
14.2.1 捕獲所有異常 461
14.2.2 處理多個異常 462
14.2.3 自定義異常 464
14.2.4 拋出新的異常 466
14.2.5 異常重新拋出 468
14.2.6 警告信息 468
14.3 程式調試 470
14.4 加速程式運行 472
14.5 實戰—自然語言處理 476
14.6 本章小結 502
第15章 Python的記憶體管理機制 503
15.1 Python記憶體架構 503
15.2 小塊空間的記憶體池 505
15.2.1 block 505
15.2.2 pool 506
15.2.3 arena 506
15.2.4 記憶體池 507
15.3 循環引用的垃圾收集 509
15.3.1 引用計數與垃圾收集 509
15.3.2 三色標記模型 510
15.4 Python垃圾收集 511
15.4.1 可收集對象鍊表 511
15.4.2 分代垃圾收集 513
15.4.3 Python中的標記—清除方法 514
15.5 實戰——記憶體監控 516
15.6 本章小結 520
第16章 性能最佳化與實踐 521
16.1 最佳化的規則 521
16.1.1 先使程式可以正常工作 521
16.1.2 從用戶的角度進行 522
16.1.3 保證代碼易讀 522
16.2 最佳化策略 523
16.2.1 尋找其他原因 523
16.2.2 度量硬體 523
16.2.3 編寫速度測試代碼 523
16.3 查找瓶頸 524
16.3.1 剖析CPU使用情況 524
16.3.2 剖析記憶體使用情況 528
16.4 降低複雜度 530
16.4.1 測量迴路複雜度 530
16.4.2 測量大O記號 530
16.4.3 簡化 531
16.5 實戰——爬蟲程式的性能最佳化 532
16.6 本章小結 537
作者簡介
劉宇宙
資深開發工程師,就職於一家知名的頭部人工智慧企業,從事Python開發多年,積累了豐富的經驗。
先後從事卡系統、IaaS平台、大數據系統、物聯網系統、網路爬蟲軟體、圖像處理和自然語言處理相關的項目的研發,現從事人工智慧平台的研發。
出版過多部Python編程和數據分析方面的著作,深受讀者歡迎。