本書緻力於幫助Python開發人員挖掘這門語言及相關程序庫的優秀特性,避免重復勞動,同時寫齣簡潔、流暢、易讀、易維護,並且具有地道Python風格的代碼。本書尤其深入探討瞭Python語言的高級用法,涵蓋數據結構、Python風格的對象、並行與並發,以及元編程等不同的方麵。
Luciano Ramalho,從1998年起就成為瞭Python程序員。他是Python軟件基金會的成員,Python.pro.br(巴西的一傢培訓公司)的共同所有者,還是巴西DIYI個眾創空間Garoa Hacker Clube的聯閤創始人。他領導過多個軟件開發團隊,還在巴西的媒體、銀行和政府部門教授Python課程。
前言 xvii
DIYI部分 序幕
第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 為什麼切片和區間會忽略ZUI後一個元素 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 當列錶不是shouxuan時 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 選擇ZUI佳策略:簡單的方式 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
坦白說,我最近在Python的學習上遇到瞭一些瓶頸。雖然我已經能寫一些簡單的腳本和應用程序,但在處理更復雜的項目時,總感覺力不從心,代碼寫齣來也顯得有些笨拙,不夠“Pythonic”。看到這本書的書名,尤其是“流暢的Python”幾個字,簡直擊中瞭我內心最深處的渴望。我一直認為,真正的Python高手不僅僅在於掌握語法,更在於理解Python的設計哲學,能夠寫齣符閤Python社區規範、易於閱讀和維護的代碼。而“PSF研究員 知名PyCon演講者心血之作”這個標簽,無疑給這本書加瞭雙保險。PSF(Python Software Foundation)是Python語言的官方組織,其研究員的見解必定是權威而深刻的。PyCon作為全球最盛大的Python開發者大會,其演講者往往代錶著行業最前沿的思考和實踐。將這兩者結閤起來,我幾乎可以斷定,這本書的內容絕不是市麵上那些韆篇一律的教程,而是充滿瞭洞見、經驗和實戰技巧。我特彆好奇書中會如何講解Python的元編程、生成器、協程等高級概念,以及如何纔能寫齣真正高效、優雅的Python代碼,剋服常見的性能陷阱。我相信這本書能為我提供一條清晰的進階之路,讓我擺脫“知道怎麼寫”到“知道為什麼這麼寫”的轉變。
評分一直以來,我都覺得Python的魅力在於它的簡潔與強大,但真正要做到“流暢”地運用它,還需要更深層次的理解。這本書的書名——“圖靈教育 流暢的Python”,立刻引起瞭我的興趣。它暗示瞭這本書將帶領讀者超越基礎語法,去探索Python語言的精髓和設計哲學。而“PSF研究員 知名PyCon演講者心血之作”的附加信息,更是讓我對這本書的含金量充滿瞭期待。PSF研究員的身份,意味著作者對Python有深入的研究和權威的見解,而PyCon演講者則代錶瞭其在社區中的影響力和分享知識的能力。我希望這本書能夠深入講解Python的一些高級特性,比如裝飾器、元類、生成器錶達式、異步編程等,並且能夠以清晰易懂的方式解釋這些概念背後的原理。同時,我也希望作者能夠分享一些實用的編程技巧和最佳實踐,幫助我寫齣更具“Pythonic”風格的代碼,避免一些常見的錯誤和陷阱。這本書的齣現,仿佛為我打開瞭一扇通往Python世界更深處的大門,讓我對學習和掌握Python有瞭更大的熱情和信心。
評分這本書我真是太期待瞭!看瞭封麵設計,簡潔大氣,非常有質感,立刻就勾起瞭我想要一探究竟的欲望。標題“圖靈教育 流暢的Python”就暗示瞭它不是那種淺嘗輒止的入門讀物,而是緻力於讓讀者真正掌握Python的精髓,寫齣優雅、高效的代碼。而“PSF研究員 知名PyCon演講者心血之作”更是讓我信心倍增,這絕對是大牛的分享,經過瞭專業領域的檢驗,絕非泛泛之輩。PyCon演講者往往能將復雜的技術概念用生動有趣的方式呈現齣來,結閤PSF研究員的嚴謹和深度,我預感這本書會涵蓋Python的很多核心原理和高級特性,甚至可能會觸及到一些鮮為人知的內部機製,這對於我這樣想要不斷提升Python功力的開發者來說,簡直是福音。我一直在尋找一本能夠幫助我“流暢”寫Python的書,不再被各種細節睏擾,而是能專注於解決問題本身。這本書的齣現,讓我覺得我的Python學習之路終於有瞭明確的指引,也讓我對未來能夠寫齣更具“Pythonic”風格的代碼充滿瞭期待。我迫不及待地想要翻開它,跟著作者一起,用一種全新的視角去理解和運用Python,讓我的編程技藝更上一層樓。
評分這本書的書名本身就充滿瞭吸引力。“圖靈教育”這個齣版社在技術類書籍領域一直有著不錯的口碑,質量相對有保證。“流暢的Python”更是點明瞭這本書的核心價值——它不僅僅是教你如何寫Python代碼,而是教你如何寫齣“好”的Python代碼,那種優雅、高效、易於理解的代碼。而“PSF研究員 知名PyCon演講者心血之作”這幾個字,瞬間就把這本書的權威性和專業性推嚮瞭一個新的高度。PSF研究員意味著作者擁有深厚的理論功底和對Python語言核心機製的洞察,而知名PyCon演講者則暗示瞭作者具備齣色的溝通能力和分享經驗的能力。我猜想這本書的內容絕對不會止步於基礎語法的羅列,而是會深入到Python的內部原理、設計思想,甚至可能會包括一些內存管理、GIL(全局解釋器鎖)的機製等話題,這些都是決定代碼性能和可擴展性的關鍵。我非常期待能夠從這本書中學習到如何更好地利用Python的特性來解決實際問題,寫齣更健壯、更優化的程序。這本書對我來說,不僅僅是一本技術書籍,更是一種編程理念的啓迪。
評分我是一名Python的初學者,雖然市麵上關於Python的書籍琳琅滿目,但很多都過於淺顯,或者技術更新迭代太快,內容很快就過時瞭。我一直希望能找到一本既能打牢基礎,又能引領我走嚮更深層次理解的“寶藏”書籍。當我看到“圖靈教育 流暢的Python”這個標題時,心中湧起一股強烈的認同感。“流暢”這個詞,正是我對理想Python編程狀態的追求——代碼自然、易懂,運行高效。而“PSF研究員 知名PyCon演講者心血之作”更是讓我眼前一亮。這不僅僅是一個作者的頭銜,更是一種品質的保證。這意味著作者對Python有著極其深刻的理解,並且有能力將這些知識用最清晰、最易於理解的方式傳達給讀者。我期待書中能夠詳細講解Python的各種核心數據結構、麵嚮對象編程的精髓、以及一些不常用的但非常強大的標準庫模塊。更重要的是,我希望它能教會我如何寫齣“Pythonic”的代碼,避免一些常見的陷阱,提升代碼的復用性和可維護性。這本書的齣現,讓我覺得我終於找到瞭那個能夠引領我跨越初學者階段,進入Python進階殿堂的引路人。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有