Python 進階:實際應用開發實戰 Advanced Python Development: Using Powerful Language Features in Real-World Applications

Matthew Wilkes

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

商品描述

本書的目標是介紹Python語言及其工具中並不是每個人都知道的部分。
如果你是一名經驗豐富的開發人員,則很可能已經知道本書要介紹的許多工具,
但可能也有很多是你想要使用、但還沒有時間了解的工具。
如果你負責一個已建成的穩定係統,就更可能遇到這種情況,
因為對於這樣的系統,並不能夠頻繁地重構組件來利用新的語言特性。

目錄大綱

前言
致謝
審校者簡介
第1章 原型設計和環境1
1.1 Python中的原型設計1
1.1.1 使用REPL設計原型2
1.1.2 使用Python腳本設計原型5
1.1.3 使用腳本和pdb設計原型6
1.1.4 使用Jupyter設計原型9
1.1.5 本章的原型設計11
1.2 環境設置13
1.3 創建新項目14
1.3.1 設計腳本原型15
1.3.2 安裝依賴項18
1.4 導出到.py文件20
1.5 構建命令行接口22
1.5.1 sys模塊和argv23
1.5.2 argparse24
1.5.3 click26
1.6 打破界限28
1.6.1 遠程內核28
1.6.2 開發不能在本地運行的代碼32
1.7 完成後的腳本34
1.8 小結36
更多資源36
第2章 測試、檢查和linting37
2.1 測試40
2.1.1 何時編寫測試42
2.1.2 創建格式化函數來提高可測試性43
2.1.3 pytest46
2.2 類型檢查56
2.2.1 安裝mypy57
2.2.2 添加類型提示58
2.2.3 子類和繼承60
2.2.4 泛型類型62
2.2.5 調試以及過度使用類型64
2.2.6 何時使用類型,何時避免使用類型66
2.2.7 將類型提示與代碼分離67
2.3 linting68
2.3.1 安裝flake8和black69
2.3.2 修復現有代碼70
2.3.3 自動運行71
2.3.4 拉取時運行73
2.4 小結74
更多資源75
第3章 打包腳本76
3.1 術語77
3.2 目錄結構77
3.3 安裝腳本和元數據80
3.4 依賴項80
3.5 聲明式配置82
3.5.1 在setup.py中需要避免的事項82
3.5.2 使用setup.cfg86
3.6 自定義索引服務器88
3.6.1 創建pypiserver90
3.6.2 持久性91
3.6.3 保密性92
3.6.4 完整性92
3.6.5 wheel格式和在安裝時執行代碼93
3.7 使用入口點安裝控制台腳本95
3.8 README、DEVELOP和CHANGES97
3.8.1 Markdown格式97
3.8.2 reStructuredText格式99
3.8.3 README101
3.8.4 CHANGES.md和版本化101
3.9 上游依賴項版本鎖定103
3.9.1 寬鬆鎖定103
3.9.2 嚴格鎖定104
3.9.3 應該使用哪種鎖定方案105
3.10 上傳版本105
3.11 小結107
更多資源107
第4章 從腳本到框架109
4.1 編寫傳感器插件110
4.2 添加新的命令行選項113
4.2.1 子命令113
4.2.2 命令選項116
4.2.3 錯誤處理117
4.2.4 通過實參類型將解析工作
 交給click120
4.2.5 自定義click實參類型121
4.2.6 常用選項123
4.3 允許使用第三方傳感器插件124
4.3.1 使用固定名稱檢測插件126
4.3.2 使用入口點檢測插件127
4.3.3 配置文件129
4.3.4 環境變量132
4.3.5 apd.sensors與類似程序的方法對比133
4.4 小結133
更多資源134
第5章 其他接口136
5.1 Web微服務136
5.1.1 WSGI137
5.1.2 API設計142
5.1.3 Flask144
5.1.4 Python裝飾器146
5.1.5 測試視圖函數157
5.1.6 部署159
5.2 將軟件作為第三方軟件擴展160
5.2.1 與其他開發人員就簽名達成一致165
5.2.2 抽象基類167
5.2.3 後備策略170
5.2.4 綜合運用174
5.3 修復代碼中的序列化問題176
5.4 版本化API180
5.5 小結183
更多資源183
第6章 聚合過程185
6.1 cookiecutter185
6.2 創建聚合包189
6.2.1 數據庫類型190
6.2.2 示例192
6.2.3 對象–關係映射器193
6.2.4 版本化數據庫197
6.2.5 加載數據202
6.3 新技術209
6.3.1 數據庫210
6.3.2 自定義特性行為210
6.3.3 生成器210
6.4 小結210
更多資源211
第7章 並行和異步212
7.1 非阻塞IO213
7.2 多線程與多進程218
7.2.1 低級線程219
7.2.2 字節碼222
7.2.3 鎖與死鎖225
7.2.4 避免全局狀態229
7.2.5 其他同步原語234
7.2.6 ProcessPoolExecutor241
7.2.7 使代碼使用多線程241
7.3 asyncio242
7.3.1 async def242
7.3.2 await243
7.3.3 async for245
7.3.4 async with249
7.3.5 異步鎖定原語249
7.3.6 使用同步庫251
7.3.7 使代碼異步化252
7.4 比較255
7.5 做出選擇255
7.6 小結257
更多資源258
第8章 高級asyncio259
8.1 測試異步代碼259
8.1.1 測試代碼260
8.1.2 模擬對像以方便進行單元測試267
8.2 異步數據庫276
8.2.1 經典SQLAlchemy風格277
8.2.2 使用run_in_executor280
8.2.3 查詢數據282
8.2.4 避免複雜查詢284
8.2.5 其他方案293
8.3 異步代碼中的全局變量294
8.4 小結296
更多資源297
第9章 查看數據298
9.1 查詢函數298
9.1.1 過濾數據303
9.1.2 多層迭代器306
9.1.3 其他過濾器312
9.1.4 測試查詢函數313
9.2 顯示多個傳感器316
9.3 處理數據319