Python 高級編程, 2/e (Expert Python programming) Python高级编程(第2版)

[波蘭]Micha Jaworski 賈沃斯基 [法]Tarek Ziadé 萊德

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

商品描述

Python作為一種高-級程序設計語言,憑借其簡潔、易讀及可擴展性日漸成為程序設計領域備受推崇的語言之一。
本書基於Python 3.5版本進行講解,通過13章的內容,深度揭示了Python編程的高-級技巧。本書從Python語言及其社區的現狀開始介紹,對Python語法、命名規則、Python包的編寫、部署代碼、擴展程序開發、管理代碼、文檔編寫、測試開發、代碼優化、並發編程、設計模式等重要話題進行了全面系統化的講解。
本書適合想要進一步提高自身Python編程技能的讀者閱讀,也適合對Python編程感興趣的讀者參考學習。全書結合典型且實用的開發案例,可以幫助讀者創建高性能的、可靠且可維護的Python應用。

作者簡介

[波蘭]Micha Jaworski 賈沃斯基  [法]Tarek Ziadé萊德 (作者)

Micha Jaworski有著7年Python編程的經驗。他還是graceful的創建者,這是一個構建於falcon之上的REST框架。他曾在不同的公司擔任過多種角色,從一名普通的全棧開發人員到軟件架構師再到一家快節奏創業公司的工程副總裁。他目前是Opera軟件公司TV Store(電視應用商店)團隊的首-席後端工程師。他在設計高性能的分佈式服務方面擁有豐富的經驗。他還是一些流行的Python開源項目的活躍貢獻者。

Tarek Ziadé是Mozilla的工程經理,與一個專門用Python為Firefox構建大規模Web應用的團隊合作。他對Python打包做出過貢獻,而且從早期Zope開始就使用過各種不同的Python Web框架。
Tarek還創建了Afpy——法國的Python用戶組,並且用法語寫過兩本關於Python的書。他還在諸如Solutions Linux、PyCon、OSCON和EuroPython等國際活動中做過多次法語演講和教學。

目錄大綱

第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