Python 3高級教程(第3版)
內容描述
《Python 3高級教程(第3版)》將引導你改進編程技術和方法,成為一名更具生產力和創造性的Python程序員。書中探討的一些概念和特性不僅可以幫助你改進代碼,而且還將加深你對Python社區中有關Python的哲學見解和細節理解。
《Python 3高級教程(第3版)》提供的一些工具有助於你編寫簡潔的創新性代碼。書中首先回顧了Python的一些核心指導原則,這些指導原則將在本書後面的各種概念和示例中加以說明。本書的前半部分探討了函數、類、協議和字符串的各個方面,並介紹了一些可能不是常識的技術,它們共同為你構築堅實的Python編程基礎。本書的後半部分涵蓋了文檔、測試和應用的發布。通過學習本書,你將能夠開發一個復雜的Python框架,其中包含貫穿全書的思想。
作為第3版,本書新增和更新的內容包括迭代器在Python 3中的作用、使用Scrapy和Beautful Soup進行Web抓取、使用Requests調用沒有字符串的Web頁面、用於分發和安裝的新工具,等等。在本書的最後,你還將學習一些不常見的特性,從而將自己的Python技能提升到一個新的高度。
主要內容
使用各類Python函數實現程序
使用類和麵向對象編程
使用標準庫和第三方庫中的字符串
使用Python獲取網站數據
編寫測試套件以實現自動化單元測試
回顧成像、隨機數生成和NumPy科學擴展
瞭解Python文檔的玄機,確定分發代碼的更佳方式
目錄大綱
目 錄
第1章 原理與哲學 1
1.1 Python之禪 1
1.1.1 優美勝於醜陋 3
1.1.2 明瞭勝於晦澀 3
1.1.3 簡潔勝於復雜 4
1.1.4 復雜勝於難以理解 5
1.1.5 扁平勝於嵌套 5
1.1.6 寬松勝於緊湊 6
1.1.7 可讀性很重要 7
1.1.8 即便是特例,也不可違背這些規則 8
1.1.9 實用性勝於純粹性 8
1.1.10 錯誤永遠不應該悄無聲息地過去 9
1.1.11 除非明確地沉默 10
1.1.12 面對模棱兩可的情況,拒絕猜測的誘惑 11
1.1.13 應該有一種(最好只有一種)顯而易見的方法 12
1.1.14 盡管這種方式起初可能並不明顯,除非你是荷蘭人 13
1.1.15 做比不做要好 13
1.1.16 不假思索就動手還不如不做 14
1.1.17 如果實現難以解釋,那就是一個糟糕的想法 14
1.1.18 如果實現容易解釋,則可能是一個好主意 14
1.1.19 命名空間是一個很棒的想法,讓我們做更多這樣的事情吧 15
1.2 不要重復自己 15
1.3 松耦合 16
1.4 武士原則 16
1.5 帕累托原則 17
1.6 穩健性原則 17
1.7 向後兼容性 19
1.8 小結 19
第2章 基礎知識 20
2.1 總體概念 20
2.1.1 迭代 20
2.1.2 緩存 22
2.1.3 透明度 23
2.2 流程控制 23
2.2.1 捕獲異常 24
2.2.2 異常鏈 27
2.2.3 當一切順利的時候 29
2.2.4 繼續執行,無論異常如何 31
2.2.5 優化循環 32
2.2.6 with語句 33
2.2.7 條件表達式 34
2.3 迭代 36
2.3.1 序列解包 37
2.3.2 列表解析式 39
2.3.3 生成器表達式 40
2.3.4 集合解析式 41
2.3.5 字典解析式 41
2.3.6 將迭代器鏈接在一起 42
2.3.7 將迭代器壓縮在一起 42
2.4 容器數據類型 43
2.4.1 集合 43
2.4.2 命名元組 48
2.4.3 有序字典 48
2.4.4 帶有默認值的字典 49
2.5 導入代碼 50
2.5.1 回退(備用)導入 50
2.5.2 從即將發布的版本中導入 51
2.5.3 使用all進行自定義導入 52
2.5.4 相對導入 54
2.5.5 import()函數 54
2.5.6 importlib模塊 57
2.6 令人興奮的Python擴展:NIST的隨機數信標 57
2.6.1 如何安裝NIST信標庫 58
2.6.2 示例:獲取值 58
2.6.3 示例:模擬拋硬幣並記錄每次正反面的結果 59
2.7 小結 59
第3章 函數 60
3.1 參數 61
3.1.1 規劃時的靈活性 61
3.1.2 可變位置參數 62
3.1.3 可變關鍵字參數 63
3.1.4 組合不同類型的參數 64
3.1.5 調用具有可變參數的函數 67
3.1.6 傳遞參數 67
3.1.7 自省 69
3.1.8 示例:標識參數值 70
3.1.9 示例:一個更簡潔的版本 72
3.1.10 示例:驗證參數 75
3.2 裝飾器 76
3.2.1 閉包 78
3.2.2 包裝器 80
3.2.3 帶參數的裝飾器 81
3.2.4 帶參數或不帶參數的裝飾器 83
3.2.5 示例:記憶化 85
3.2.6 示例:用於創建裝飾器的裝飾器 86
3.3 函數註解 88
3.3.1 示例:類型安全 89
3.3.2 提取樣板 97
3.3.3 示例:類型強制轉換 100
3.3.4 用裝飾器進行註解 102
3.3.5 示例:將類型安全作為裝飾器 102
3.4 生成器 107
3.5 lambda 109
3.6 自省 110
3.6.1 標識對象類型 111
3.6.2 模塊和軟件包 112
3.6.3 文檔字符串 112
3.7 令人興奮的Python擴展:統計 115
3.7.1 安裝Pandas和matplotlib 115
3.7.2 創建文本文件 115
3.7.3 使用Pandas顯示數據 116
3.7.4 進行一些數據分析 116
3.7.5 使用matplotlib進行繪圖 117
3.7.6 圖表的類型 117
3.7.7 將matplotlib與Pandas結合起來 118
3.8 小結 118
第4章 類 119
4.1 繼承 119
4.1.1 多重繼承 122
4.1.2 方法解析順序 123
4.1.3 示例:C3算法 127
4.1.4 使用super()函數將控制權傳遞給其他類 134
4.1.5 自省 137
4.2 如何創建類 139
4.2.1 在運行時創建類 140
4.2.2 元類 141
4.2.3 示例:插件框架 142
4.2.4 控制命名空間 145
4.3 成員變量 147
4.3.1 屬性 147
4.3.2 描述器 149
4.4 方法 152
4.4.1 非綁定方法 152
4.4.2 綁定方法 153
4.5 魔術方法 156
4.5.1 創建實例 157
4.5.2 示例:自動化子類 158
4.5.3 處理成員變量 159
4.5.4 字符串表示 162
4.6 令人興奮的Python擴展:迭代器 164
4.7 小結 166
第5章 通用協議 167
5.1 基本運算 167
5.1.1 數學運算 169
5.1.2 按位運算 173
5.1.3 運算符的變體 175
5.2 數字 177
5.2.1 符號運算 180
5.2.2 比較運算 180
5.3 可迭代對象 181
5.4 序列 186
5.5 映射 191
5.6 call()方法 192
5.7 上下文管理器 193
5.8 令人興奮的Python擴展:Scrapy 195
5.8.1 安裝Scrapy 196
5.8.2 運行Scrapy 196
5.8.3 項目設置 196
5.8.4 使用Scrapy獲取Web數據 197
5.8.5 通過Scrapy瀏覽網頁 198
5.8.6 shell選項 198
5.9 小結 199
第6章 對象管理 200
6.1 命名空間字典 201
6.1.1 示例:Borg模式 201
6.1.2 示例:自緩存屬性 205
6.2 垃圾回收 209
6.2.1 引用計數 210
6.2.2 循環引用 211
6.2.3 弱引用 214
6.3 Python對象的序列化 216
6.4 復制 221
6.4.1 淺層復制 222
6.4.2 深層復制 224
6.5 令人興奮的Python擴展:Beautiful Soup 226
6.5.1 安裝Beautiful Soup 226
6.5.2 使用Beautiful Soup 226
6.6 小結 227
第7章 字符串 228
7.1 字節字符串 228
7.1.1 借助chr()和ord()進行簡單的轉換 229
7.1.2 借助struct模塊進行復雜的轉換 230
7.2 文本 233
7.2.1 Unicode 234
7.2.2 編碼 234
7.3 簡單的替換 236
7.4 格式化 238
7.4.1 在對象中查找值 240
7.4.2 區分字符串類型 240
7.4.3 標準格式規範 240
7.4.4 為文本文檔製作目錄 242
7.4.5 自定義格式規範 244
7.5 令人興奮的Python擴展:feedparser庫 245
7.5.1 如何安裝feedparser庫 245
7.5.2 如何使用feedparser庫 245
7.6 小結 246
第8章 文檔的編寫 247
8.1 恰當地命名 247
8.2 註釋 248
8.3 文檔字符串 249
8.3.1 描述函數的作用 250
8.3.2 解釋參數 250
8.3.3 返回值 250
8.3.4 包含預期的異常 251
8.4 代碼之外的文檔 251
8.4.1 安裝與配置 251
8.4.2 教程 251
8.4.3 參考文檔 252
8.5 用於編寫文檔的實用工具 252
8.5.1 格式化 253
8.5.2 鏈接 254
8.5.3 Sphinx 256
8.6 令人興奮的Python擴展:NumPy 256
8.6.1 安裝NumPy 256
8.6.2 使用NumPy 257
8.6.3 使用NumPy數組 258
8.6.4 統計度量 258
8.7 小結 259
第9章 測試 260
9.1 測試驅動開發 260
9.2 doctest 261
9.2.1 格式化代碼 261
9.2.2 呈現輸出 262
9.2.3 與文檔集成 263
9.2.4 運行測試 263
9.3 unittest模塊 265
9.3.1 初始化配置 265
9.3.2 編寫測試 266
9.3.3 其他比較 270
9.3.4 測試字符串和其他序列內容 270
9.3.5 測試異常 271
9.3.6 測試對象標識 273
9.3.7 釋放資源 273
9.4 提供自定義的測試類 274
9.5 令人興奮的Python擴展:Pillow庫 274
9.5.1 如何安裝Pillow庫 275
9.5.2 圖像顯示:確定文件的大小和類型並顯示 275
9.5.3 圖像處理:裁剪圖像的一部分 275
9.5.4 圖像處理:改變圖像的方向 276
9.5.5 圖像處理:濾鏡 276
9.6 小結 276
第10章 發布 277
10.1 許可證 277
10.1.1 GNU通用公共許可證 277
10.1.2 Affero通用公共許可證 279
10.1.3 GNU 寬通用公共許可證 279
10.1.4 伯克利軟件發行許可證 280
10.1.5 其他許可證 280
10.2 打包 281
10.2.1 setup.py 282
10.2.2 MANIFEST.in 284
10.2.3 sdist命令 285
10.3 發布 286
10.4 令人興奮的Python擴展:secrets模塊 288
10.4.1 隨機數 288
10.4.2 密碼生成器 288
10.5 小結 289
第11章 構建CSV框架sheets 290
11.1 構建聲明性框架 291
11.1.1 聲明性編程簡介 291
11.1.2 是否構建聲明性框架 292
11.2 構建框架 293
11.2.1 管理選項 294
11.2.2 定義字段 297
11.2.3 將字段附加到類 298
11.2.4 添加元類 300
11.2.5 整合 303
11.3 字段排序 304
11.3.1 DeclarativeMeta.prepare() 305
11.3.2 Column.init() 307
11.3.3 Column.new() 310
11.3.4 CounterMeta.call() 311
11.3.5 挑選選項 313
11.4 構建字段庫 313
11.4.1 StringField(字符串字段) 315
11.4.2 IntegerColumn(整數列) 315
11.4.3 FloatColumn(浮點數列) 316
11.4.4 DecimalColumn(小數列) 316
11.4.5 DateColumn(日期列) 317
11.5 回到CSV 321
11.5.1 檢查參數 322
11.5.2 填充值 324
11.5.3 讀取器 327
11.5.4 寫入器 331
11.6 小結 334