內容簡介
學習編寫更出色的代碼,讓工作流程更加平滑 Python是一門強大且快速增長的動態程式語言。雖然它提供了很多用於編寫高級、簡潔、可維護代碼的工具,但是對於這些技術卻一直沒有一個清晰的解釋。《Python高級編程》為介紹所有Python功能提供了一個入口。每個概念的完整闡述、關於應用程式的討論、動手指南都將教會你設計更好的架構,以及編寫使得應用程式更加健壯與高效的代碼。
目錄
第Ⅰ部分 函 數
第1章 裝飾器 3
1.1 理解裝飾器 3
1.2 裝飾器語法 4
1.3 在何處使用裝飾器 6
1.4 編寫裝飾器的理由 6
1.5 編寫裝飾器的時機 7
1.5.1 附加功能 7
1.5.2 數據的清理或添加 7
1.5.3 函式註冊 7
1.6 編寫裝飾器 7
1.6.1 初始示例:函式註冊表 8
1.6.2 執行時封裝代碼 9
1.6.3 裝飾器參數 16
1.7 裝飾類 20
1.8 類型轉換 23
1.9 小結 25
第2章 上下文管理器 27
2.1 上下文管理器的定義 27
2.2 上下文管理器的語法 28
2.2.1 with語句 28
2.2.2 enter和exit方法 28
2.2.3 異常處理 29
2.3 何時應該編寫上下文管理器 30
2.3.1 資源清理 30
2.3.2 避免重複 31
2.4 更簡單的語法 38
2.5 小結 39
第3章 生成器 41
3.1理解生成器41
3.2理解生成器語法41
3.2.1next函式43
3.2.2StopIteration異常45
3.3生成器之間的互動47
3.4疊代對象與疊代器49
3.5標準庫中的生成器50
3.5.1range50
3.5.2dict.items及其家族50
3.5.3zip51
3.5.4map52
3.5.5檔案對象52
3.6何時編寫生成器53
3.6.1分塊訪問數據53
3.6.2分塊計算數據54
3.7何時使用生成器單例模式54
3.8生成器內部的生成器55
3.9 小結56
第Ⅱ部分類
第4章 魔術方法59
4.1魔術方法語法59
4.2可用的魔術方法60
4.2.1創建與銷毀61
4.2.2類型轉換63
4.2.3比較65
4.3其他魔術方法75
4.4小結76
第5章 元類77
5.1類與對象77
5.1.1直接使用type78
5.1.2type鏈80
5.1.3type的角色80
5.2編寫元類81
5.2.1__new__方法81
5.2.2__new__與__init__方法81
5.2.3元類示例82
5.2.4元類繼承82
5.3使用元類84
5.3.1Python385
5.3.2Python285
5.3.3需要跨版本執行的代碼怎么辦85
5.3.4跨版本兼容性在何時重要86
5.4何時使用元類87
5.4.1說明性類聲明87
5.4.2類驗證88
5.4.3非繼承屬性90
5.5顯式選擇的問題91
5.6meta-coding92
5.7小結94
第6章 類工廠95
6.1類型回顧95
6.2理解類工廠函式96
6.3決定何時應該編寫類工廠98
6.3.1運行時屬性98
6.3.2避免類屬性一致性問題102
6.3.3關於單例模式問題的解答105
6.4小結107
第7章 抽象基類109
7.1使用抽象基類109
7.2聲明虛擬子類110
7.2.1聲明虛擬子類的原因111
7.2.2使用register作為裝飾器113
7.2.3__subclasshook__113
7.3聲明協定115
7.3.1其他現有的方法115
7.3.2抽象基類的價值118
7.3.3抽象屬性120
7.3.4抽象類或靜態方法121
7.4內置抽象基類122
7.4.1隻包含一個方法的抽象基類122
7.4.2可供集合使用的抽象基類123
7.4.3額外的抽象基類124
7.5小結124
第Ⅲ部分數據
第8章 字元串與Unicode127
8.1文本字元串與位元組字元串127
8.2包含非ASCII字元的字元串132
8.2.1觀察區別132
8.2.2Unicode是ASCII的超集133
8.3其他編碼133
8.4讀取檔案135
8.4.1Python3135
8.4.2Python2137
8.4.3讀取其他源137
8.4.4指定Python檔案編碼137
8.5嚴格編碼139
8.5.1不觸發錯誤139
8.5.2註冊錯誤處理程式140
8.6小結141
第9章 正則表達式143
9.1使用正則表達式的原因143
9.2Python中的正則表達式144
9.2.1原始字元串144
9.2.2match對象145
9.2.3找到多個匹配145
9.3基本正則表達式146
9.3.1字元組146
9.3.2可選字元150
9.3.3重複151
9.4分組152
9.4.1零分組154
9.4.2命名分組155
9.4.3引用已經存在的分組156
9.5先行斷言157
9.6標記158
9.6.1不區分大小寫158
9.6.2ASCII與Unicode159
9.6.3點匹配換行符159
9.6.4多行模式159
9.6.5詳細模式160
9.6.6調試模式160
9.6.7使用多個標記160
9.6.8內聯標記160
9.7替換161
9.8已編譯的正則表達式162
9.9小結163
第Ⅳ部分其他高級主題
第10章 Python2與Python3167
10.1跨版本兼容性策略167
10.1.1__future__模組168
10.1.22to3168
10.1.3限制170
10.1.4six170
10.2Python3中的變更171
10.2.1字元串與Unicode171
10.2.2Print函式171
10.2.3除法172
10.2.4絕對與相對導入173
10.2.5“老式風格”類的移除174
10.2.6元類語法175
10.2.7異常語法176
10.2.8字典方法178
10.2.9函式方法179
10.2.10疊代器179
10.3標準庫重定位180
10.3.1合併“高效”模組180
10.3.2URL模組181
10.3.3重命名181
10.3.4其他包重組181
10.4版本檢測182
10.5小結182
第11章 單元測試183
11.1測試的連續性183
11.1.1副本生態系統183
11.1.2隔離的環境184
11.1.3優點與缺點185
11.2測試代碼185
11.2.1代碼布局186
11.2.2測試函式186
11.2.3assert語句188
11.3單元測試框架188
11.3.1執行單元測試189
11.3.2載入測試192
11.4模擬193
11.4.1模擬函式調用193
11.4.2斷言被模擬的調用195
11.4.3檢查模擬197
11.4.4檢查調用199
11.5其他測試工具199
11.6小結201
第12章 CLI工具203
12.1optparse203
12.1.1一個簡單的參數203
12.1.2選項205
12.1.3使用optparse的原因212
12.2argparse213
12.2.1本質213
12.2.2參數與選項214
12.2.3使用argparse的理由220
12.3小結221
第13章 asyncio模組223
13.1事件循環223
13.2協程227
13.3Future對象與Task對象229
13.3.1Future對象229
13.3.2Task對象230
13.4回調231
13.4.1不保證成功232
13.4.2幕後232
13.4.3帶參數的回調233
13.5任務聚合233
13.5.1聚集任務234
13.5.2等待任務235
13.6佇列238
13.7伺服器240
13.8小結242
第14章 代碼風格243
14.1原則243
14.1.1假定你的代碼需要維護243
14.1.2保持一致性244
14.1.3考慮對象在程式中的存在方式,
尤其是那些帶有數據的
對象244
14.1.4不要做重複工作244
14.1.5讓注釋講故事245
14.1.6奧卡姆剃刀原則245
14.2標準245
14.2.1簡潔的規則246
14.2.2文檔字元串246
14.2.3空行246
14.2.4導入247
14.2.5變數247
14.2.6注釋248
14.2.7行長度248
14.3小結249