內容簡介
Python作為一種高-級程式設計語言,憑藉其簡潔、易讀及可擴展性日漸成為程式設計領域備受推崇的語轎想趨言之一。
本書基於Python 3.5版本進行講解,通過13章的內容,深度揭示了Python編程的高-級技巧。本書從Python語言及其社區的現狀開始介紹定芝淋殃,對Python語法、命名規則、Python包的編寫、部署代碼、擴展程式開發、管理代碼、文檔編寫、測試開發、代碼最佳化、並發編程、設計模式等重要話題進行了全面系統化的講解。
本書適合想要進一步提高自身Python編程技能的讀者閱讀,也適合對Python編程感興趣的讀者參考學習。全書結合典型且實用的開發案例,可以幫助讀者創建高性能的、可靠且可維護的Python套用。
圖書目錄
第 1章 Python現狀 1
1.1 Python的現狀與未來 1
1.2 Python升級及其原因 2
1.3 追蹤Python**新變化——PEP
文恥樂坑棵檔 2
1.4 當前Python 3的普及程度 3
1.5 Python 3和Python 2的主要
差異 4
1.5.1 為什麼要關注這些差異 4
1.5.2 主要的語法差異和常見
陷阱 4
1.5.3 用於保持跨版本兼容性的
常用工具和技術 6
1.6 不只是CPython 9
1.6.1 為什麼要關注Python
實現 10
1.6.2 Stackless Python 10
1.6.3 Jython 10
1.6.4 IronPython 11
1.6.5 PyPy 11
1.7 Python開發的現代方法 12
1.8 套用層Python環境隔離 13
1.8.1 為什麼要隔離 14
1.8.2 常用解決方案 15
1.8.3 婚蒸端選擇哪種工具 18
1.9 系統級環境隔離 19
1.9.1 使用Vagrant的虛擬開發
環境 20
1.9.2 容器化與虛擬化的對比 21
1.10 常用的生產力工具 21
1.10.1 自定義Python shell—
IPython、bpython、
ptpython等 22
1.10.2 互動式調試器 24
1.11 有用的資源 25
1.12 小結 25
第 2章 語法**佳實踐——類級別
以下 26
2.1 Python的內置類型 26
2.1.1 字元串與位元組 27
2.1.2 集合類型 30
2.2 高 級語法 39
2.2.1 疊代器 40
2.2.2 yield語句 41
2.2.3 裝飾器 44
2.2.4 上下文管理器—with
語句 54
2.3 你可能還不知道的其他語法
元素 58
2.3.1 for...else...語句 58
2.3.2 函式註解 59
2.4 小結 60
第3章 語法**佳實踐寒協懂—類級別
以上 61
3.1 子類化內置類型 61
3.2 訪問超類中的方法 63
3.2.1 Python 2中的舊式類與
super 65
3.2.2 甩墓笑理解Python的方法解析
順序 66
3.2.3 使用super易犯的錯誤 70
3.2.4 **佳實踐 73
3.3 高 級屬性訪問模式 73
3.3.1 描述符 74
3.3.2 property 79
3.3.3 槽 81
3.4 元編程 82
3.4.1 裝飾器— 一種元編程
方法 83
3.4.2 類裝飾器 83
3.4.3 使用__new__()方法覆
寫實例創建過程 85
3.4.4 元類 87
3.4.5 一些關於代碼生成的
提示 94
3.5 小結 100
第4章 選擇好的名稱 101
4.1 PEP 8與命名**佳實踐 101
4.1.1 為何要遵守PEP 8以及何時
遵守PEP 8 101
4.1.2 超越PEP 8—團隊的風格
指南 102
4.2 命名風格 102
4.3 命名指南 110
4.3.1 用“has”或“is”前綴命名
布爾元素 111
4.3.2 灑良用複數形式命名集合
變數 111
4.3.3 用顯式名稱命名字典 111
4.3.4 避免通用名稱 111
4.3.5 避免現有名稱 112
4.4 參數的**佳實踐 113
4.4.1 通過疊代設計構建
參數 113
4.4.2 信任參數和測試 114
4.4.3 小心使用*args和
**kwargs魔法參數 115
4.5 類的名稱 117
4.6 模組和包的名稱 117
4.7 有用的工具 118
4.7.1 Pylint 118
4.7.2 pep8和flake8 120
4.8 小結 120
第5章 編寫一個包 121
5.1 創建一個包 121
5.1.1 Python打包工具的混亂
狀態 122
5.1.2 項目配置 123
5.1.3 自定義setup命令 131
5.1.4 在開發期間使用包 132
5.2 命名空間包 133
5.2.1 為什麼有用 133
5.2.2 PEP 420—隱式命名
空間包 135
5.2.3 以前Python版本中的命名
空間包 136
5.3 上傳一個包 137
5.3.1 PyPI—Python包索引 137
5.3.2 原始碼包與構建包 139
5.4 獨立執行檔 142
5.4.1 獨立執行檔何時
有用 143
5.4.2 常用工具 143
5.4.3 可執行包中Python代碼的
安全性 150
5.5 小結 151
第6章 部署代碼 152
6.1 十二要素套用 152
6.2 用Fabric進行自動化部署 154
6.3 你自己的包索引或索引鏡像 158
6.3.1 PyPI鏡像 159
6.3.2 使用包進行部署 160
6.4 常見約定與實踐 168
6.4.1 檔案系統層次結構 168
6.4.2 隔離 168
6.4.3 使用進程管理工具 169
6.4.4 應該在用戶空間運行套用
代碼 170
6.4.5 使用HTTP反向代理 171
6.4.6 優雅地重新載入進程 171
6.5 代碼檢測與監控 172
6.5.1 記錄錯誤—
sentry/raven 173
6.5.2 監控系統與套用指標 175
6.5.3 處理套用日誌 177
6.6 小結 181
第7章 使用其他語言開發Python
擴展 182
7.1 使用C或者C++編寫擴展 182
7.2 為什麼你想用擴展 184
7.2.1 提高關鍵代碼段的性能 185
7.2.2 集成現有的使用不同語言
編寫的代碼 185
7.2.3 集成第三方動態庫 185
7.2.4 創建自定義數據類型 186
7.3 編寫擴展 186
7.3.1 純C擴展 187
7.3.2 Cython 201
7.4 挑戰 205
7.4.1 額外的複雜性 205
7.4.2 調試 206
7.5 無擴展的動態庫接口 206
7.5.1 ctypes 207
7.5.2 CFFI 212
7.6 小結 214
第8章 管理代碼 215
8.1 版本控制系統 215
8.1.1 集中式系統 215
8.1.2 分散式系統 217
8.1.3 集中式還是分散式 219
8.1.4 儘可能使用Git 219
8.1.5 Git工作流程與GitHub工作
流程 220
8.2 持續的開發過程 223
8.2.1 持續集成 224
8.2.2 持續交付 227
8.2.3 持續部署 227
8.2.4 常用的持續集成工具 228
8.2.5 選擇正確的工具和常見的
陷阱 234
8.3 小結 236
第9章 文檔化你的項目 237
9.1 7項技術寫作規則 237
9.1.1 兩步寫作 238
9.1.2 定位讀者 238
9.1.3 使用簡單的風格 239
9.1.4 限制信息範圍 240
9.1.5 使用現實中的代碼
示例 240
9.1.6 使用輕量且充分的方法 241
9.1.7 使用模板 241
9.2 reStructuredText入門 242
9.2.1 章節結構 243
9.2.2 列表 245
9.2.3 行內標記 246
9.2.4 文字塊 246
9.2.5 連結 247
9.3 構建文檔 248
9.4 構建自己的文檔集 254
9.4.1 構建格局 254
9.4.2 文檔構建與持續集成 259
9.5 小結 260
第 10章 測試驅動開發 261
10.1 我不測試 261
10.1.1 測試開發的原則 261
10.1.2 什麼樣的測試 265
10.1.3 達式Python標準測試
工具 268
10.2 我做測試 273
10.2.1 unittest陷阱 273
10.2.2 unittest的替代品 274
10.2.3 測試覆蓋率 280
10.2.4 仿真與模擬 282
10.2.5 測試環境與依賴
兼容性 289
10.2.6 文檔驅動開發 292
10.3 小結 294
第 11章 最佳化——一般原則與分析
技術 295
11.1 3個最佳化規則 295
11.1.1 首先要能工作 295
11.1.2 從用戶的角度考慮 296
11.1.3 保持代碼的可讀性和
可維護性 297
11.2 最佳化策略 297
11.2.1 找到另外的罪魁禍首 297
11.2.2 擴展硬體 298
11.2.3 編寫速度測試 298
11.3 查找瓶頸 299
11.3.1 分析CPU使用情況 299
11.3.2 分析記憶體使用 307
11.3.3 分析網路使用情況 315
11.4 小結 316
第 12章 最佳化——一些強大的技術 317
12.1 降低複雜度 318
12.1.1 循環複雜度 319
12.1.2 大O記法 320
12.2 簡化 322
12.3 使用集合模組 323
12.3.1 deque 324
12.3.2 defaultdict 325
12.3.3 namedtuple 326
12.4 架構體系的權衡 327
12.4.1 使用啟發式和近似
算法 327
12.4.2 使用任務佇列和延遲
處理 328
12.4.3 使用機率型數據結構 331
12.5 快取 331
12.5.1 確定性快取 332
12.5.2 非確定性快取 335
12.5.3 快取服務 336
12.6 小結 338
第 13章 並發 339
13.1 為什麼需要並發 339
13.2 多執行緒 340
13.2.1 什麼是多執行緒 340
13.2.2 Python如何處理多
執行緒 341
13.2.3 何時應該使用多執行緒 342
13.3 多進程 356
13.4 異步編程 364
13.4.1 協同多任務與異步I/O 364
13.4.2 Python中的async和
await關鍵字 365
13.4.3 老Python版本中的
asyncio 369
13.4.4 異步編程實例 369
13.4.5 使用futures將異步
代碼同步化 372
13.5 小結 374
第 14章 有用的設計模式 376
14.1 創建型模式 376
14.2 結構型模式 379
14.2.1 適配器 380
14.2.2 代理 394
14.2.3 外觀 395
14.3 行為模式 395
14.3.1 觀察者 396
14.3.2 訪問者 398
14.3.3 模板 400
14.4 小結 403
陷阱 234
8.3 小結 236
第9章 文檔化你的項目 237
9.1 7項技術寫作規則 237
9.1.1 兩步寫作 238
9.1.2 定位讀者 238
9.1.3 使用簡單的風格 239
9.1.4 限制信息範圍 240
9.1.5 使用現實中的代碼
示例 240
9.1.6 使用輕量且充分的方法 241
9.1.7 使用模板 241
9.2 reStructuredText入門 242
9.2.1 章節結構 243
9.2.2 列表 245
9.2.3 行內標記 246
9.2.4 文字塊 246
9.2.5 連結 247
9.3 構建文檔 248
9.4 構建自己的文檔集 254
9.4.1 構建格局 254
9.4.2 文檔構建與持續集成 259
9.5 小結 260
第 10章 測試驅動開發 261
10.1 我不測試 261
10.1.1 測試開發的原則 261
10.1.2 什麼樣的測試 265
10.1.3 達式Python標準測試
工具 268
10.2 我做測試 273
10.2.1 unittest陷阱 273
10.2.2 unittest的替代品 274
10.2.3 測試覆蓋率 280
10.2.4 仿真與模擬 282
10.2.5 測試環境與依賴
兼容性 289
10.2.6 文檔驅動開發 292
10.3 小結 294
第 11章 最佳化——一般原則與分析
技術 295
11.1 3個最佳化規則 295
11.1.1 首先要能工作 295
11.1.2 從用戶的角度考慮 296
11.1.3 保持代碼的可讀性和
可維護性 297
11.2 最佳化策略 297
11.2.1 找到另外的罪魁禍首 297
11.2.2 擴展硬體 298
11.2.3 編寫速度測試 298
11.3 查找瓶頸 299
11.3.1 分析CPU使用情況 299
11.3.2 分析記憶體使用 307
11.3.3 分析網路使用情況 315
11.4 小結 316
第 12章 最佳化——一些強大的技術 317
12.1 降低複雜度 318
12.1.1 循環複雜度 319
12.1.2 大O記法 320
12.2 簡化 322
12.3 使用集合模組 323
12.3.1 deque 324
12.3.2 defaultdict 325
12.3.3 namedtuple 326
12.4 架構體系的權衡 327
12.4.1 使用啟發式和近似
算法 327
12.4.2 使用任務佇列和延遲