Python 進階編程:編寫更高效、優雅的 Python 代碼

劉宇宙 謝 東 劉 艷 著

  • 出版商: 機械工業
  • 出版日期: 2021-04-01
  • 定價: $774
  • 售價: 7.9$611
  • 語言: 簡體中文
  • 頁數: 556
  • 裝訂: 平裝
  • ISBN: 7111678508
  • ISBN-13: 9787111678502
  • 相關分類: Python程式語言
  • 立即出貨 (庫存 < 4)

買這商品的人也買了...

相關主題

商品描述

本書將幫助讀者系統掌握編寫高效、優雅的Python代碼的方法,快速成長為一位高水平的Python開發工程師。
作者是Python編程領域的資深開發工程師,有多年的Python開發經驗。本書得到了行業里15位技術專家的高度評價。
為了幫助讀者編寫出高效的Python代碼,本書不僅從源代碼的角度系統地講解了Python的語法,讓讀者能知其然並知其所以然,而且結合具體的應用需求,對並發編程、性能優化、測試與調試、異常處理、內存管理等Python開發中的高級知識進行了詳細的講解。
為了指導讀者編寫出更優雅的Python代碼,本書針對具體問題給出了大量的實例代碼並給出了編碼風格上的方法和建議。
如果你是沒有Python編程經驗的新人,將通過本書系統掌握Python語法及其背後的原理,並從一開始就養成良好的編碼習慣;如果你是有一定Python編程經驗的老手,將通過本書掌握各種Python編程中的高級知識,同時領略到優雅的編碼風格和技巧。

作者簡介

劉宇宙資深開發工程師,目前就職於一家知名的頭部人工智能企業,從事Python開發多年,積累了豐富的經驗。
先後從事卡系統、IaaS平台、大數據系統、物聯網系統、網絡爬蟲軟件、圖像處理和自然語言處理相關的項目的研發,現從事人工智能平台的研發。
出版過多部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