《流暢的Python》電子書,建議儲存下來

書籍簡介

《流暢的Python》電子書,建議儲存下來

流暢的Python

作者

: [巴西] Luciano Ramalho

出版社:

人民郵電出版社

出品方:

圖靈教育

原作名:

Fluent Python

譯者

: 安道 / 吳珂

出版年:

2017-5-15

頁數:

628

定價:

139元

裝幀:

平裝

叢書:

圖靈程式設計叢書·Python系列

ISBN:

9787115454157

獲取方法

關注微信公眾號:

申霖

,傳送:

2005

目錄· · · · · ·

前言 xvii

第一部分 序幕

第1章 Python 資料模型 2

1。1 一摞 Python 風格的紙牌 3

1。2 如何使用特殊方法 6

1。2。1 模擬數值型別 7

1。2。2 字串表示形式 9

1。2。3 算術運算子 10

1。2。4 自定義的布林值 10

1。3 特殊方法一覽 10

1。4 為什麼 len 不是普通方法 12

1。5 本章小結 12

1。6 延伸閱讀 13

第二部分 資料結構

第2章 序列構成的陣列 16

2。1 內建序列型別概覽 17

2。2 列表推導和生成器表示式 18

2。2。1 列表推導和可讀性 18

2。2。2 列表推導同 filter 和 map 的比較 20

2。2。3 笛卡兒積 20

2。2。4 生成器表示式 21

2。3 元組不僅僅是不可變的列表 22

2。3。1 元組和記錄 23

2。3。2 元組拆包 23

2。3。3 巢狀元組拆包 25

2。3。4 具名元組 26

2。3。5 作為不可變列表的元組 27

2。4 切片 28

2。4。1 為什麼切片和區間會忽略最後一個元素 28

2。4。2 對物件進行切片 29

2。4。3 多維切片和省略 30

2。4。4 給切片賦值 31

2。5 對序列使用 + 和 * 31

2。6 序列的增量賦值 33

2。7 list。sort 方法和內建函式 sorted 36

2。8 用 bisect 來管理已排序的序列 37

2。8。1 用 bisect 來搜尋 38

2。8。2 用 bisect。insort 插入新元素 40

2。9 當列表不是首選時 41

2。9。1 陣列 41

2。9。2 記憶體檢視 44

2。9。3 NumPy 和 SciPy 45

2。9。4 雙向佇列和其他形式的佇列 47

2。10 本章小結 49

2。11 延伸閱讀 50

第3章 字典和集合 54

3。1 泛對映型別 54

3。2 字典推導 56

3。3 常見的對映方法 57

3。4 對映的彈性鍵查詢 61

3。4。1 defaultdict :處理找不到的鍵的一個選擇 61

3。4。2 特殊方法 __missing__ 62

3。5 字典的變種 65

3。6 子類化 UserDict 65

3。7 不可變對映型別 67

3。8 集合論 68

3。8。1 集合字面量 69

3。8。2 集合推導 71

3。8。3 集合的操作 71

3。9 dict 和 set 的背後 73

3。9。1 一個關於效率的實驗 74

3。9。2 字典中的散列表 75

3。9。3 dict 的實現及其導致的結果 78

3。9。4 set 的實現以及導致的結果 80

3。10 本章小結 80

3。11 延伸閱讀 81

第4章 文字和位元組序列 83

4。1 字元問題 84

4。2 位元組概要 85

4。3 基本的編解碼器 88

4。4 瞭解編解碼問題 89

4。4。1 處理 UnicodeEncodeError 90

4。4。2 處理 UnicodeDecodeError 90

4。4。3 使用預期之外的編碼載入模組時丟擲的 SyntaxError 91

4。4。4 如何找出位元組序列的編碼 92

4。4。5 BOM:有用的鬼符 93

4。5 處理文字檔案 94

4。6 為了正確比較而規範化 Unicode 字串 99

4。6。1 大小寫摺疊 101

4。6。2 規範化文字匹配實用函式 102

4。6。3 極端“規範化”:去掉變音符號 103

4。7 Unicode 文字排序 105

4。8 Unicode 資料庫 108

4。9 支援字串和位元組序列的雙模式 API 109

4。9。1 正則表示式中的字串和位元組序列 109

4。9。2 os 函式中的字串和位元組序列 111

4。10 本章小結 112

4。11 延伸閱讀 113

第三部分 把函式視作物件

第5章 一等函式 118

5。1 把函式視作物件 119

5。2 高階函式 120

5。3 匿名函式 122

5。4 可呼叫物件 122

5。5 使用者定義的可呼叫型別 123

5。6 函式內省 124

5。7 從定位引數到僅限關鍵字引數 126

5。8 獲取關於引數的資訊 127

5。9 函式註解 131

5。10 支援函數語言程式設計的包 132

5。10。1 operator 模組 132

5。10。2 使用 functools。partial 凍結引數 135

5。11 本章小結 137

5。12 延伸閱讀 137

第6章 使用一等函式實現設計模式 141

6。1 案例分析:重構“策略”模式 142

6。1。1 經典的“策略”模式 142

6。1。2 使用函式實現“策略”模式 145

6。1。3 選擇最佳策略:簡單的方式 148

6。1。4 找出模組中的全部策略 149

6。2 “命令”模式 150

6。3 本章小結 151

6。4 延伸閱讀 152

第7章 函式裝飾器和閉包 154

7。1 裝飾器基礎知識 155

7。2 Python 何時執行裝飾器 156

7。3 使用裝飾器改進“策略”模式 157

7。4 變數作用域規則 159

7。5 閉包 161

7。6 nonlocal 宣告 164

7。7 實現一個簡單的裝飾器 165

7。8 標準庫中的裝飾器 168

7。8。1 使用 functools。lru_cache 做備忘 168

7。8。2 單分派泛函數 170

7。9 疊放裝飾器 172

7。10 引數化裝飾器 173

7。10。1 一個引數化的註冊裝飾器 173

7。10。2 引數化 clock 裝飾器 175

7。11 本章小結 177

7。12 延伸閱讀 178

第四部分 面向物件慣用法

第8章 物件引用、可變性和垃圾回收 182

8。1 變數不是盒子 183

8。2 標識、相等性和別名 184

8。2。1 在 == 和 is 之間選擇 185

8。2。2 元組的相對不可變性 186

8。3 預設做淺複製 187

8。4 函式的引數作為引用時 190

8。4。1 不要使用可變型別作為引數的預設值 191

8。4。2 防禦可變引數 193

8。5 del 和垃圾回收 195

8。6 弱引用 196

8。6。1 WeakValueDictionary 簡介 197

8。6。2 弱引用的侷限 199

8。7 Python 對不可變型別施加的把戲 199

8。8 本章小結 201

8。9 延伸閱讀 201

第9章 符合 Python 風格的物件 205

9。1 物件表示形式 206

9。2 再談向量類 206

9。3 備選構造方法 208

9。4 classmethod 與 staticmethod 209

9。5 格式化顯示 210

9。6 可雜湊的 Vector2d 213

9。7 Python 的私有屬性和“受保護的”屬性 218

9。8 使用 __slots__ 類屬性節省空間 220

9。9 覆蓋類屬性 222

9。10 本章小結 224

9。11 延伸閱讀 225

第10章 序列的修改、雜湊和切片 229

10。1 Vector 類:使用者定義的序列型別 230

10。2 Vector 類第1 版:與 Vector2d 類相容 230

10。3 協議和鴨子型別 232

10。4 Vector 類第2 版:可切片的序列 233

10。4。1 切片原理 234

10。4。2 能處理切片的 __getitem__ 方法 236

10。5 Vector 類第3 版:動態存取屬性 237

10。6 Vector 類第4 版:雜湊和快速等值測試 240

10。7 Vector 類第5 版:格式化 244

10。8 本章小結 251

10。9 延伸閱讀 251

第11章 介面:從協議到抽象基類 256

11。1 Python 文化中的介面和協議 257

11。2 Python 喜歡序列 258

11。3 使用猴子補丁在執行時實現協議 260

11。4 Alex Martelli 的水禽 262

11。5 定義抽象基類的子類 266

11。6 標準庫中的抽象基類 267

11。6。1 collections。abc 模組中的抽象基類 267

11。6。2 抽象基類的數字塔 269

11。7 定義並使用一個抽象基類 270

11。7。1 抽象基類句法詳解 273

11。7。2 定義 Tombola 抽象基類的子類 274

11。7。3 Tombola 的虛擬子類 276

11。8 Tombola 子類的測試方法 278

11。9 Python 使用 register 的方式 281

11。10 鵝的行為有可能像鴨子 281

11。11 本章小結 283

11。12 延伸閱讀 284

第12章 繼承的優缺點 289

12。1 子類化內建型別很麻煩 289

12。2 多重繼承和方法解析順序 292

12。3 多重繼承的真實應用 296

12。4 處理多重繼承 298

12。5 一個現代示例:Django 通用檢視中的混入 301

12。6 本章小結 304

12。7 延伸閱讀 304

第13章 正確過載運算子 307

13。1 運算子過載基礎 308

13。2 一元運算子 308

13。3 過載向量加法運算子 + 310

13。4 過載標量乘法運算子 * 315

13。5 眾多比較運算子 318

13。6 增量賦值運算子 321

13。7 本章小結 325

13。8 延伸閱讀 326

第五部分 控制流程

第14章 可迭代的物件、迭代器和生成器 330

14。1 Sentence 類第1 版:單詞序列 331

14。2 可迭代的物件與迭代器的對比 334

14。3 Sentence 類第2 版:典型的迭代器 337

14。4 Sentence 類第3 版:生成器函式 339

14。5 Sentence 類第4 版:惰性實現 343

14。6 Sentence 類第5 版:生成器表示式 344

14。7 何時使用生成器表示式 345

14。8 另一個示例:等差數列生成器 346

14。9 標準庫中的生成器函式 349

14。10 Python 3。3 中新出現的句法: yield from 357

14。11 可迭代的歸約函式 358

14。12 深入分析 iter 函式 359

14。13 案例分析:在資料庫轉換工具中使用生成器 360

14。14 把生成器當成協程 362

14。15 本章小結 362

14。16 延伸閱讀 363

第15章 上下文管理器和 else 塊 368

15。1 先做這個,再做那個: if 語句之外的 else 塊 369

15。2 上下文管理器和 with 塊 370

15。3 contextlib 模組中的實用工具 374

15。4 使用 @contextmanager 375

15。5 本章小結 378

15。6 延伸閱讀 378

第16章 協程 381

16。1 生成器如何進化成協程 382

16。2 用作協程的生成器的基本行為 382

16。3 示例:使用協程計算移動平均值 385

16。4 預激協程的裝飾器 386

16。5 終止協程和異常處理 388

16。6 讓協程返回值 391

16。7 使用 yield from 393

16。8 yield from 的意義 398

16。9 使用案例:使用協程做離散事件模擬 403

16。9。1 離散事件模擬簡介 403

16。9。2 計程車隊運營模擬 404

16。10 本章小結 410

16。11 延伸閱讀 411

第17章 使用期物處理併發 416

17。1 示例:網路下載的三種風格 416

17。1。1 依序下載的指令碼 418

17。1。2 使用 concurrent。futures 模組下載 420

17。1。3 期物在哪裡 421

17。2 阻塞型 I/O 和 GIL 424

17。3 使用 concurrent。futures 模組啟動程序 424

17。4 實驗 Executor。map 方法 426

17。5 顯示下載進度並處理錯誤 429

17。5。1 flags2 系列示例處理錯誤的方式 433

17。5。2 使用 futures。as_completed 函式 435

17。5。3 執行緒和多程序的替代方案 437

17。6 本章小結 437

17。7 延伸閱讀 438

第18章 使用 asyncio 包處理併發 442

18。1 執行緒與協程對比 443

18。1。1 asyncio。Future :故意不阻塞 448

18。1。2 從期物、任務和協程中產出 449

18。2 使用 asyncio 和 aiohttp 包下載 450

18。3 避免阻塞型呼叫 454

18。4 改進 asyncio 下載指令碼 456

18。4。1 使用 asyncio。as_completed 函式 456

18。4。2 使用 Executor 物件,防止阻塞事件迴圈 461

18。5 從回撥到期物和協程 462

18。6 使用 asyncio 包編寫伺服器 466

18。6。1 使用 asyncio 包編寫 TCP 伺服器 467

18。6。2 使用 aiohttp 包編寫 Web 伺服器 471

18。6。3 更好地支援併發的智慧客戶端 474

18。7 本章小結 475

18。8 延伸閱讀 476

第六部分 超程式設計

第19章 動態屬性和特性 482

19。1 使用動態屬性轉換資料 483

19。1。1 使用動態屬性訪問 JSON 類資料 485

19。1。2 處理無效屬性名 487

19。1。3 使用 __new__ 方法以靈活的方式建立物件 488

19。1。4 使用 shelve 模組調整 OSCON 資料來源的結構 490

19。1。5 使用特性獲取連結的記錄 493

19。2 使用特性驗證屬性 498

19。2。1 LineItem 類第1 版:表示訂單中商品的類 498

19。2。2 LineItem 類第2 版:能驗證值的特性 499

19。3 特性全解析 500

19。3。1 特性會覆蓋例項屬性 501

19。3。2 特性的文件 503

19。4 定義一個特性工廠函式 504

19。5 處理屬性刪除操作 506

19。6 處理屬性的重要屬性和函式 507

19。6。1 影響屬性處理方式的特殊屬性 507

19。6。2 處理屬性的內建函式 508

19。6。3 處理屬性的特殊方法 509

19。7 本章小結 510

19。8 延伸閱讀 510

第20章 屬性描述符 514

20。1 描述符示例:驗證屬性 514

20。1。1 LineItem 類第3 版:一個簡單的描述符 515

20。1。2 LineItem 類第4 版:自動獲取儲存屬性的名稱 519

20。1。3 LineItem 類第5 版:一種新型描述符 524

20。2 覆蓋型與非覆蓋型描述符對比 526

20。2。1 覆蓋型描述符 528

20。2。2 沒有 __get__ 方法的覆蓋型描述符 529

20。2。3 非覆蓋型描述符 530

20。2。4 在類中覆蓋描述符 531

20。3 方法是描述符 531

20。4 描述符用法建議 533

20。5 描述符的文件字串和覆蓋刪除操作 534

20。6 本章小結 535

20。7 延伸閱讀 536

第21章 類超程式設計 538

21。1 類工廠函式 539

21。2 定製描述符的類裝飾器 541

21。3 匯入時和執行時比較 543

21。4 元類基礎知識 547

21。5 定製描述符的元類 552

21。6 元類的特殊方法 __prepare__ 554

21。7 類作為物件 556

21。8 本章小結 557

21。9 延伸閱讀 557

結語 560

附錄 A 輔助指令碼 563

Python 術語表 588

作者簡介 600

關於封面 600