Python作為一種高-級程序設(shè)計語言,憑借其簡潔、易讀及可擴展性日漸成為程序設(shè)計領(lǐng)域備受推崇的語言之一。
本書基于Python 3.5版本進行講解,通過13章的內(nèi)容,深度揭示了Python編程的高-級技巧。本書從Python語言及其社區(qū)的現(xiàn)狀開始介紹,對Python語法、命名規(guī)則、Python包的編寫、部署代碼、擴展程序開發(fā)、管理代碼、文檔編寫、測試開發(fā)、代碼優(yōu)化、并發(fā)編程、設(shè)計模式等重要話題進行了全面系統(tǒng)化的講解。
本書適合想要進一步提高自身Python編程技能的讀者閱讀,也適合對Python編程感興趣的讀者參考學(xué)習。全書結(jié)合典型且實用的開發(fā)案例,可以幫助讀者創(chuàng)建高性能的、可靠且可維護的Python應(yīng)用。
Python是一門動態(tài)編程語言,它簡單而又強大,適用于眾多領(lǐng)域。盡管編寫Python代碼比較容易,但是編寫高效且易于維護和復(fù)用的代碼是一個挑戰(zhàn)。
本書的重點是讓你熟悉zui佳實踐、有用的工具以及標準,這都是Python專業(yè)人士每天使用的。首先,你將了解Python 3.5中新增加的功能以及可以提高生產(chǎn)力的快速技巧。接下來,你將學(xué)習使用這個新版本中的高-級且有用的Python語法元素,以及實現(xiàn)元編程的不同方法。本書講解了代碼管理工具、編寫清晰文檔的方法和測試驅(qū)動開發(fā),這些都是編寫代碼的重要因素。通過學(xué)習優(yōu)化的一般原則、查找瓶頸的策略以及應(yīng)用優(yōu)化的選定工具,你可以對如何編寫高效的代碼有更深入的理解。
讀完本書后,你會成為一名可以編寫高效且可維護代碼的專家。
通過閱讀本書,你將能夠:
了解在Python社區(qū)中廣泛采用的約定和zui佳實踐;
高效打包Python代碼,以便將其應(yīng)用于社區(qū)和生產(chǎn);
應(yīng)用在遠程系統(tǒng)上自動化部署代碼的簡單且輕量的方法;
提高代碼的質(zhì)量、可靠性及性能;
在Python中編寫并發(fā)代碼;
使用其他語言編寫的代碼來擴展Python。
Micha? Jaworski有著7年P(guān)ython編程的經(jīng)驗。他還是graceful的創(chuàng)建者,這是一個構(gòu)建于falcon之上的REST框架。他曾在不同的公司擔任過多種角色,從一名普通的全棧開發(fā)人員到軟件架構(gòu)師再到一家快節(jié)奏創(chuàng)業(yè)公司的工程副總裁。他目前是Opera軟件公司TV Store(電視應(yīng)用商店)團隊的首-席后端工程師。他在設(shè)計高性能的分布式服務(wù)方面擁有豐富的經(jīng)驗。他還是一些流行的Python開源項目的活躍貢獻者。
Tarek Ziade?是Mozilla的工程經(jīng)理,與一個專門用Python為Firefox構(gòu)建大規(guī)模Web應(yīng)用的團隊合作。他對Python打包做出過貢獻,而且從早期Zope開始就使用過各種不同的Python Web框架。
Tarek還創(chuàng)建了Afpy法國的Python用戶組,并且用法語寫過兩本關(guān)于Python的書。他還在諸如Solutions Linux、PyCon、OSCON和EuroPython等國際活動中做過多次法語演講和教學(xué)。
目錄
第1章 Python現(xiàn)狀 1
1.1
Python的現(xiàn)狀與未來 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
為什么要關(guān)注這些差異 4
1.5.2
主要的語法差異和常見陷阱 4
1.5.3
用于保持跨版本兼容性的常用工具和技術(shù) 6
1.6 不只是CPython 9
1.6.1
為什么要關(guān)注Python實現(xiàn) 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開發(fā)的現(xiàn)代方法 12
1.8 應(yīng)用層Python環(huán)境隔離 13
1.8.1
為什么要隔離 14
1.8.2
常用解決方案 15
1.8.3
選擇哪種工具 18
1.9 系統(tǒng)級環(huán)境隔離 19
1.9.1
使用Vagrant的虛擬開發(fā)環(huán)境 20
1.9.2
容器化與虛擬化的對比 21
1.10
常用的生產(chǎn)力工具 21
1.10.1
自定義Python shell IPython、bpython、 ptpython等 22
1.10.2
交互式調(diào)試器 24
1.11
有用的資源 25
1.12
小結(jié) 25
第2章 語法最佳實踐類級別以下 26
2.1
Python的內(nèi)置類型 26
2.1.1
字符串與字節(jié) 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
函數(shù)注解 59
2.4 小結(jié) 60
第3章 語法最佳實踐類級別以上 61
3.1 子類化內(nèi)置類型 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__()方法覆寫實例創(chuàng)建過程 85
3.4.4
元類 87
3.4.5
一些關(guān)于代碼生成的提示 94
3.5 小結(jié) 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
用復(fù)數(shù)形式命名集合變量 111
4.3.3
用顯式名稱命名字典 111
4.3.4
避免通用名稱 111
4.3.5
避免現(xiàn)有名稱 112
4.4 參數(shù)的最佳實踐 113
4.4.1
通過迭代設(shè)計構(gòu)建參數(shù) 113
4.4.2
信任參數(shù)和測試 114
4.4.3
小心使用*args和**kwargs魔法參數(shù) 115
4.5 類的名稱 117
4.6 模塊和包的名稱 117
4.7 有用的工具 118
4.7.1
Pylint 118
4.7.2
pep8和flake8 120
4.8 小結(jié) 120
第5章 編寫一個包 121
5.1 創(chuàng)建一個包 121
5.1.1
Python打包工具的混亂狀態(tài) 122
5.1.2
項目配置 123
5.1.3
自定義setup命令 131
5.1.4
在開發(fā)期間使用包 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
PyPIPython包索引 137
5.3.2
源代碼包與構(gòu)建包 139
5.4 獨立可執(zhí)行文件 142
5.4.1
獨立可執(zhí)行文件何時有用 143
5.4.2
常用工具 143
5.4.3
可執(zhí)行包中Python代碼的安全性 150
5.5 小結(jié) 151
第6章 部署代碼 152
6.1 十二要素應(yīng)用 152
6.2 用Fabric進行自動化部署 154
6.3 你自己的包索引或索引鏡像 158
6.3.1
PyPI鏡像 159
6.3.2
使用包進行部署 160
6.4 常見約定與實踐 168
6.4.1
文件系統(tǒng)層次結(jié)構(gòu) 168
6.4.2
隔離 168
6.4.3
使用進程管理工具 169
6.4.4
應(yīng)該在用戶空間運行應(yīng)用代碼 170
6.4.5
使用HTTP反向代理 171
6.4.6
優(yōu)雅地重新加載進程 171
6.5 代碼檢測與監(jiān)控 172
6.5.1
記錄錯誤sentry/raven 173
6.5.2
監(jiān)控系統(tǒng)與應(yīng)用指標 175
6.5.3
處理應(yīng)用日志 177
6.6 小結(jié) 181
第7章 使用其他語言開發(fā)Python擴展 182
7.1 使用C或者C 編寫擴展 182
7.2 為什么你想用擴展 184
7.2.1
提高關(guān)鍵代碼段的性能 185
7.2.2
集成現(xiàn)有的使用不同語言編寫的代碼 185
7.2.3
集成第三方動態(tài)庫 185
7.2.4
創(chuàng)建自定義數(shù)據(jù)類型 186
7.3 編寫擴展 186
7.3.1
純C擴展 187
7.3.2
Cython 201
7.4 挑戰(zhàn) 205
7.4.1
額外的復(fù)雜性 205
7.4.2
調(diào)試 206
7.5 無擴展的動態(tài)庫接口 206
7.5.1
ctypes 207
7.5.2
CFFI 212
7.6 小結(jié) 214
第8章 管理代碼 215
8.1 版本控制系統(tǒng) 215
8.1.1
集中式系統(tǒng) 215
8.1.2
分布式系統(tǒng) 217
8.1.3
集中式還是分布式 219
8.1.4
盡可能使用Git 219
8.1.5
Git工作流程與GitHub工作流程 220
8.2 持續(xù)的開發(fā)過程 223
8.2.1
持續(xù)集成 224
8.2.2
持續(xù)交付 227
8.2.3
持續(xù)部署 227
8.2.4
常用的持續(xù)集成工具 228
8.2.5
選擇正確的工具和常見的陷阱 234
8.3 小結(jié) 236
第9章 文檔化你的項目 237
9.1
7項技術(shù)寫作規(guī)則 237
9.1.1
兩步寫作 238
9.1.2
定位讀者 238
9.1.3
使用簡單的風格 239
9.1.4
限制信息范圍 240
9.1.5
使用現(xiàn)實中的代碼示例 240
9.1.6
使用輕量且充分的方法 241
9.1.7
使用模板 241
9.2
reStructuredText入門 242
9.2.1
章節(jié)結(jié)構(gòu) 243
9.2.2
列表 245
9.2.3
行內(nèi)標記 246
9.2.4
文字塊 246
9.2.5
鏈接 247
9.3 構(gòu)建文檔 248
9.4 構(gòu)建自己的文檔集 254
9.4.1
構(gòu)建格局 254
9.4.2
文檔構(gòu)建與持續(xù)集成 259
9.5 小結(jié) 260
第10章 測試驅(qū)動開發(fā) 261
10.1
我不測試 261
10.1.1
測試開發(fā)的原則 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
測試環(huán)境與依賴兼容性 289
10.2.6
文檔驅(qū)動開發(fā) 292
10.3
小結(jié) 294
第11章 優(yōu)化一般原則與分析技術(shù) 295
11.1
3個優(yōu)化規(guī)則 295
11.1.1
首先要能工作 295
11.1.2
從用戶的角度考慮 296
11.1.3
保持代碼的可讀性和可維護性 297
11.2
優(yōu)化策略 297
11.2.1
找到另外的罪魁禍首 297
11.2.2
擴展硬件 298
11.2.3
編寫速度測試 298
11.3
查找瓶頸 299
11.3.1
分析CPU使用情況 299
11.3.2
分析內(nèi)存使用 307
11.3.3
分析網(wǎng)絡(luò)使用情況 315
11.4
小結(jié) 316
第12章 優(yōu)化一些強大的技術(shù) 317
12.1
降低復(fù)雜度 318
12.1.1
循環(huán)復(fù)雜度 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
架構(gòu)體系的權(quán)衡 327
12.4.1
使用啟發(fā)式和近似算法 327
12.4.2
使用任務(wù)隊列和延遲
處理 328
12.4.3
使用概率型數(shù)據(jù)結(jié)構(gòu) 331
12.5
緩存 331
12.5.1
確定性緩存 332
12.5.2
非確定性緩存 335
12.5.3
緩存服務(wù) 336
12.6
小結(jié) 338
第13章 并發(fā) 339
13.1
為什么需要并發(fā) 339
13.2
多線程 340
13.2.1
什么是多線程 340
13.2.2
Python如何處理多線程 341
13.2.3
何時應(yīng)該使用多線程 342
13.3
多進程 356
13.4
異步編程 364
13.4.1
協(xié)同多任務(wù)與異步I/O 364
13.4.2
Python中的async和await關(guān)鍵字 365
13.4.3
老Python版本中的asyncio 369
13.4.4
異步編程實例 369
13.4.5
使用futures將異步代碼同步化 372
13.5
小結(jié) 374
第14章 有用的設(shè)計模式 376
14.1
創(chuàng)建型模式 376
14.2
結(jié)構(gòu)型模式 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
小結(jié) 403