關(guān)于我們
書單推薦
新書推薦
|
流暢的Python(第2版)
本書是Python領(lǐng)域備受推崇的經(jīng)典作品,致力于幫助Python開發(fā)人員挖掘這門語言及相關(guān)程序庫的優(yōu)秀特性,寫出簡潔、流暢、易讀、易維護(hù),并且地道的Python代碼。本書著重講解Python語言所獨(dú)有的功能,助你成功進(jìn)階為Python高手。第2版與時(shí)俱進(jìn),教你跳出舊有經(jīng)驗(yàn),探索并運(yùn)用地道的Python 3功能。第2版主體內(nèi)容分為五部分:數(shù)據(jù)結(jié)構(gòu)、函數(shù)即對(duì)象、類和協(xié)議、控制流、元編程。每一部分都精彩紛呈,通過豐富的示例和細(xì)致的講解,教你充分利用Python特性,寫出有效且現(xiàn)代的Python 3代碼。
一、領(lǐng)域好書
【領(lǐng)域好書】Python 進(jìn)階指南,精通 Python 繞不開的推薦作品
【好評(píng)如潮】Amazon 4.7 星評(píng),豆瓣評(píng)分 9.4,近 8 萬讀者學(xué)習(xí)
【作者資深】25 年一線研發(fā)經(jīng)驗(yàn),PSF(Python軟件基金會(huì))成員
二、內(nèi)容精良
【知識(shí)聚焦】專注 Python 核心特性和標(biāo)準(zhǔn)庫,助你掌握語言底層邏輯
【通俗易讀】近 500 段代碼示例 + 多圖多表,文筆詼諧,語言流暢
【Pythonic】寫簡潔、流暢、地道的 Python 代碼,飆升編程效率
三、新版特色
【優(yōu)化升級(jí)】內(nèi)容更新率超過 3 成,基于 Python 3.10 新升級(jí)
【分上下冊(cè)】新版拆分為上下兩冊(cè)(480/292頁),更方便更易讀
【作者簡介】
盧西亞諾·拉馬略(Luciano Ramalho)
Thoughtworks首席咨詢師、Python軟件基金會(huì)成員、巴西Python語言學(xué)習(xí)社區(qū)Python Brasil聯(lián)合創(chuàng)立人。擁有25年P(guān)ython編程經(jīng)驗(yàn),著有編程領(lǐng)域作品《流暢的Python》。
【譯者簡介】
安道
活躍的技術(shù)圖書譯者,譯有《流暢的Python》《Flask Web開發(fā):基于Python的Web應(yīng)用開發(fā)實(shí)戰(zhàn)》《Python網(wǎng)絡(luò)編程攻略》等圖書。
【上冊(cè)】
前言 i
第 一部分 數(shù)據(jù)結(jié)構(gòu)
第 1章 Python數(shù)據(jù)模型 3
1.1 本章新增內(nèi)容 4
1.2 一摞Python風(fēng)格的紙牌 4
1.3 特殊方法是如何使用的 7
1.3.1 模擬數(shù)值類型 8
1.3.2 字符串表示形式 10
1.3.3 自定義類型的布爾值 11
1.3.4 容器API 12
1.4 特殊方法概述 13
1.5 len為什么不是方法 14
1.6 本章小結(jié) 14
1.7 延伸閱讀 15
第 2章 豐富的序列 17
2.1 本章新增內(nèi)容 18
2.2 內(nèi)置序列類型概覽 18
2.3 列表推導(dǎo)式和生成器表達(dá)式 20
2.3.1 列表推導(dǎo)式對(duì)可讀性的影響 20
2.3.2 列表推導(dǎo)式與map和filter比較 22
2.3.3 笛卡兒積 22
2.3.4 生成器表達(dá)式 23
2.4 元組不僅僅是不可變列表 24
2.4.1 用作記錄 24
2.4.2 用作不可變列表 26
2.4.3 列表和元組方法的比較 27
2.5 序列和可迭代對(duì)象拆包 28
2.5.1 使用*獲取余下的項(xiàng) 29
2.5.2 在函數(shù)調(diào)用和序列字面量中使用*拆包 29
2.5.3 嵌套拆包 30
2.6 序列模式匹配 31
2.7 切片 37
2.7.1 為什么切片和區(qū)間排除最后一項(xiàng) 38
2.7.2 切片對(duì)象 38
2.7.3 多維切片和省略號(hào) 39
2.7.4 為切片賦值 40
2.8 使用+和*處理序列 40
2.8.1 構(gòu)建嵌套列表 41
2.8.2 使用增量賦值運(yùn)算符處理序列 42
2.8.3 一個(gè)+=運(yùn)算符賦值謎題 43
2.9 list.sort與內(nèi)置函數(shù)sorted 45
2.10 當(dāng)列表不適用時(shí) 46
2.10.1 數(shù)組 47
2.10.2 memoryview 49
2.10.3 NumPy 50
2.10.4 雙端隊(duì)列和其他隊(duì)列 52
2.11 本章小結(jié) 55
2.12 延伸閱讀 56
第3章 字典和集合 59
3.1 本章新增內(nèi)容 60
3.2 字典的現(xiàn)代句法 60
3.2.1 字典推導(dǎo)式 60
3.2.2 映射拆包 61
3.2.3 使用|合并映射 61
3.3 使用模式匹配處理映射 62
3.4 映射類型的標(biāo)準(zhǔn)API 64
3.4.1 “可哈希”指什么 64
3.4.2 常用映射方法概述 65
3.4.3 插入或更新可變的值 67
3.5 自動(dòng)處理缺失的鍵 69
3.5.1 defaultdict:處理缺失鍵的另一種選擇 69
3.5.2 __missing__方法 70
3.5.3 標(biāo)準(zhǔn)庫對(duì)__missing__方法的使用不一致 72
3.6 dict的變體 73
3.6.1 collections.OrderedDict 73
3.6.2 collections.ChainMap 73
3.6.3 collections.Counter 74
3.6.4 shelve.Shelf 74
3.6.5 子類應(yīng)繼承UserDict而不是dict 75
3.7 不可變映射 76
3.8 字典視圖 77
3.9 dict的實(shí)現(xiàn)方式對(duì)實(shí)踐的影響 78
3.10 集合論 79
3.10.1 set字面量 80
3.10.2 集合推導(dǎo)式 81
3.11 集合的實(shí)現(xiàn)方式對(duì)實(shí)踐的影響 81
3.12 字典視圖的集合運(yùn)算 84
3.13 本章小結(jié) 85
3.14 延伸閱讀 86
第4章 Unicode文本和字節(jié)序列 88
4.1 本章新增內(nèi)容 89
4.2 字符問題 89
4.3 字節(jié)概要 90
4.4 基本的編碼解碼器 92
4.5 處理編碼和解碼問題 93
4.5.1 處理UnicodeEncodeError 94
4.5.2 處理UnicodeDecodeError 95
4.5.3 加載模塊時(shí)編碼不符合預(yù)期拋出的SyntaxError 95
4.5.4 如何找出字節(jié)序列的編碼 96
4.5.5 BOM:有用的鬼符 97
4.6 處理文本文件 98
4.7 為了正確比較而規(guī)范化Unicode字符串 105
4.7.1 大小寫同一化 107
4.7.2 規(guī)范化文本匹配的實(shí)用函數(shù) 108
4.7.3 極端“規(guī)范化”:去掉變音符 109
4.8 Unicode文本排序 111
4.9 Unicode數(shù)據(jù)庫 113
4.9.1 按名稱查找字符 114
4.9.2 字符的數(shù)值意義 115
4.10 支持str和bytes的雙模式API 117
4.10.1 正則表達(dá)式中的str和bytes 117
4.10.2 os函數(shù)中的str和bytes 118
4.11 本章小結(jié) 119
4.12 延伸閱讀 119
第5章 數(shù)據(jù)類構(gòu)建器 123
5.1 本章新增內(nèi)容 124
5.2 數(shù)據(jù)類構(gòu)建器概述 124
5.3 典型的具名元組 128
5.4 帶類型的具名元組 130
5.5 類型提示入門 131
5.5.1 運(yùn)行時(shí)沒有作用 131
5.5.2 變量注解句法 132
5.5.3 變量注解的意義 132
5.6 @dataclass詳解 135
5.6.1 字段選項(xiàng) 136
5.6.2 初始化后處理 139
5.6.3 帶類型的類屬性 140
5.6.4 初始化不作為字段的變量 141
5.6.5 @dataclass示例:都柏林核心模式 142
5.7 數(shù)據(jù)類導(dǎo)致代碼異味 144
5.7.1 把數(shù)據(jù)類用作腳手架 145
5.7.2 把數(shù)據(jù)類用作中間表述 145
5.8 模式匹配類實(shí)例 145
5.8.1 簡單類模式 145
5.8.2 關(guān)鍵字類模式 146
5.8.3 位置類模式 147
5.9 本章小結(jié) 148
5.10 延伸閱讀 149
第6章 對(duì)象引用、可變性和垃圾回收 152
6.1 本章新增內(nèi)容 152
6.2 變量不是盒子 153
6.3 同一性、相等性和別名 154
6.3.1 在==和is之間選擇 156
6.3.2 元組的相對(duì)不可變性 157
6.4 默認(rèn)做淺拷貝 157
6.5 函數(shù)的參數(shù)是引用時(shí) 161
6.5.1 不要使用可變類型作為參數(shù)的默認(rèn)值 162
6.5.2 防御可變參數(shù) 164
6.6 del和垃圾回收 165
6.7 Python對(duì)不可變類型施加的把戲 167
6.8 本章小結(jié) 168
6.9 延伸閱讀 169
第二部分 函數(shù)即對(duì)象
第7章 函數(shù)是一等對(duì)象 175
7.1 本章新增內(nèi)容 176
7.2 把函數(shù)視為對(duì)象 176
7.3 高階函數(shù) 177
7.4 匿名函數(shù) 179
7.5 9種可調(diào)用對(duì)象 180
7.6 用戶定義的可調(diào)用類型 181
7.7 從位置參數(shù)到僅限關(guān)鍵字參數(shù) 182
7.8 支持函數(shù)式編程的包 184
7.8.1 operator模塊 184
7.8.2 使用functools.partial凍結(jié)參數(shù) 187
7.9 本章小結(jié) 189
7.10 延伸閱讀 189
第8章 函數(shù)中的類型提示 192
8.1 本章新增內(nèi)容 193
8.2 關(guān)于漸進(jìn)式類型 193
8.3 漸進(jìn)式類型實(shí)踐 194
8.3.1 Mypy初體驗(yàn) 195
8.3.2 讓Mypy嚴(yán)格要求 195
8.3.3 參數(shù)的默認(rèn)值 196
8.3.4 使用None表示默認(rèn)值 198
8.4 類型由受支持的操作定義 198
8.5 注解中可用的類型 202
8.5.1 Any類型 203
8.5.2 簡單的類型和類 205
8.5.3 Optional類型和Union類型 205
8.5.4 泛化容器 207
8.5.5 元組類型 209
8.5.6 泛化映射 211
8.5.7 抽象基類 212
8.5.8 Iterable 214
8.5.9 參數(shù)化泛型和TypeVar 215
8.5.10 靜態(tài)協(xié)議 218
8.5.11 Callable 223
8.5.12 NoReturn 225
8.6 注解僅限位置參數(shù)和變長參數(shù) 225
8.7 類型不完美,測試須全面 226
8.8 本章小結(jié) 227
8.9 延伸閱讀 228
第9章 裝飾器和閉包 232
9.1 本章新增內(nèi)容 233
9.2 裝飾器基礎(chǔ)知識(shí) 233
9.3 Python何時(shí)執(zhí)行裝飾器 234
9.4 注冊(cè)裝飾器 235
9.5 變量作用域規(guī)則 236
9.6 閉包 239
9.7 nonlocal聲明 241
9.8 實(shí)現(xiàn)一個(gè)簡單的裝飾器 243
9.9 標(biāo)準(zhǔn)庫中的裝飾器 245
9.9.1 使用functools.cache做備忘 245
9.9.2 使用lru_cache 248
9.9.3 單分派泛化函數(shù) 249
9.10 參數(shù)化裝飾器 252
9.10.1 一個(gè)參數(shù)化注冊(cè)裝飾器 253
9.10.2 參數(shù)化clock裝飾器 254
9.10.3 基于類的clock裝飾器 256
9.11 本章小結(jié) 257
9.12 延伸閱讀 258
第 10章 使用一等函數(shù)實(shí)現(xiàn)設(shè)計(jì)模式 261
10.1 本章新增內(nèi)容 262
10.2 案例分析:重構(gòu)策略模式 262
10.2.1 經(jīng)典的策略模式 262
10.2.2 使用函數(shù)實(shí)現(xiàn)策略模式 265
10.2.3 選擇最佳策略的簡單方式 268
10.2.4 找出一個(gè)模塊中的全部策略 269
10.3 使用裝飾器改進(jìn)策略模式 270
10.4 命令模式 272
10.5 本章小結(jié) 273
10.6 延伸閱讀 274
第三部分 類和協(xié)議
第 11章 符合Python風(fēng)格的對(duì)象 279
11.1 本章新增內(nèi)容 280
11.2 對(duì)象表示形式 280
11.3 再談向量類 281
11.4 備選構(gòu)造函數(shù) 283
11.5 classmethod與staticmethod 283
11.6 格式化顯示 284
11.7 可哈希的Vector2d 287
11.8 支持位置模式匹配 289
11.9 第3版Vector2d的完整代碼 290
11.10 Python私有屬性和“受保護(hù)”的屬性 294
11.11 使用__slots__節(jié)省空間 295
11.11.1 簡單衡量__slot__節(jié)省的內(nèi)存 297
11.11.2 總結(jié)__slots__的問題 298
11.12 覆蓋類屬性 299
11.13 本章小結(jié) 300
11.14 延伸閱讀 301
第 12章 序列的特殊方法 305
12.1 本章新增內(nèi)容 305
12.2 Vector類:用戶定義的序列類型 306
12.3 Vector類第 1版:與Vector2d類兼容 306
12.4 協(xié)議和鴨子類型 308
12.5 Vector類第 2版:可切片的序列 309
12.5.1 切片原理 310
12.5.2 能處理切片的__getitem__方法 312
12.6 Vector類第3版:動(dòng)態(tài)存取屬性 313
12.7 Vector類第4版:哈希和快速等值測試 316
12.8 Vector類第5版:格式化 321
12.9 本章小結(jié) 327
12.10 延伸閱讀 328
第 13章 接口、協(xié)議和抽象基類 332
13.1 類型圖 333
13.2 本章新增內(nèi)容 333
13.3 兩種協(xié)議 334
13.4 利用鴨子類型編程 335
13.4.1 Python喜歡序列 335
13.4.2 使用猴子補(bǔ)丁在運(yùn)行時(shí)實(shí)現(xiàn)協(xié)議 337
13.4.3 防御性編程和“快速失敗” 339
13.5 大鵝類型 340
13.5.1 子類化一個(gè)抽象基類 344
13.5.2 標(biāo)準(zhǔn)庫中的抽象基類 345
13.5.3 定義并使用一個(gè)抽象基類 347
13.5.4 抽象基類句法詳解 351
13.5.5 子類化抽象基類Tombola 352
13.5.6 抽象基類的虛擬子類 354
13.5.7 register的實(shí)際使用 356
13.5.8 使用抽象基類實(shí)現(xiàn)結(jié)構(gòu)類型 356
13.6 靜態(tài)協(xié)議 358
13.6.1 為double函數(shù)添加類型提示 358
13.6.2 運(yùn)行時(shí)可檢查的靜態(tài)協(xié)議 359
13.6.3 運(yùn)行時(shí)協(xié)議檢查的局限性 362
13.6.4 支持靜態(tài)協(xié)議 363
13.6.5 設(shè)計(jì)一個(gè)靜態(tài)協(xié)議 364
13.6.6 協(xié)議設(shè)計(jì)最佳實(shí)踐 366
13.6.7 擴(kuò)展一個(gè)協(xié)議 366
13.6.8 numbers模塊中的抽象基類和Numeric協(xié)議 367
13.7 本章小結(jié) 369
13.8 延伸閱讀 370
第 14章 繼承:瑕瑜互見 374
14.1 本章新增內(nèi)容 375
14.2 super()函數(shù) 375
14.3 子類化內(nèi)置類型很麻煩 377
14.4 多重繼承和方法解析順序 379
14.5 混入類 384
14.6 多重繼承的實(shí)際運(yùn)用 385
14.6.1 抽象基類也是混入類 386
14.6.2 ThreadingMixIn和ForkingMixIn 386
14.6.3 Django泛化視圖混入類 387
14.6.4 Tkinter中的多重繼承 390
14.7 應(yīng)對(duì)多重繼承 391
14.7.1 優(yōu)先使用對(duì)象組合,而不是類繼承 391
14.7.2 理解不同情況下使用繼承的原因 392
14.7.3 使用抽象基類顯式表示接口 392
14.7.4 通過混入明確重用代碼 392
14.7.5 為用戶提供聚合類 392
14.7.6 僅子類化為子類化設(shè)計(jì)的類 393
14.7.7 避免子類化具體類 393
14.7.8 Tkinter的好、不好以及令人厭惡的方面 394
14.8 本章小結(jié) 394
14.9 延伸閱讀 395
第 15章 類型提示進(jìn)階 399
15.1 本章新增內(nèi)容 399
15.2 重載的簽名 400
15.2.1 重載max函數(shù) 401
15.2.2 重載max函數(shù)的啟示 405
15.3 TypedDict 405
15.4 類型校正 411
15.5 在運(yùn)行時(shí)讀取類型提示 413
15.5.1 注解在運(yùn)行時(shí)的問題 414
15.5.2 解決這個(gè)問題 416
15.6 實(shí)現(xiàn)一個(gè)泛化類 417
15.7 型變 419
15.7.1 一個(gè)不變的自動(dòng)售貨機(jī) 419
15.7.2 一個(gè)協(xié)變的自動(dòng)售貨機(jī) 421
15.7.3 一個(gè)逆變的垃圾桶 421
15.7.4 型變總結(jié) 423
15.8 實(shí)現(xiàn)泛化靜態(tài)協(xié)議 425
15.9 本章小結(jié) 426
15.10 延伸閱讀 427
第 16章 運(yùn)算符重載 431
16.1 本章新增內(nèi)容 432
16.2 運(yùn)算符重載入門 432
16.3 一元運(yùn)算符 433
16.4 重載向量加法運(yùn)算符+ 435
16.5 重載標(biāo)量乘法運(yùn)算符* 439
16.6 把@當(dāng)作中綴運(yùn)算符使用 441
16.7 算術(shù)運(yùn)算符總結(jié) 443
16.8 眾多比較運(yùn)算符 443
16.9 增量賦值運(yùn)算符 446
16.10 本章小結(jié) 450
16.11 延伸閱讀 451
【下冊(cè)】
第四部分 控制流
第 17章 迭代器、生成器和經(jīng)典協(xié)程 457
17.1 本章新增內(nèi)容 458
17.2 單詞序列 458
17.3 序列可以迭代的原因:iter函數(shù) 459
17.4 可迭代對(duì)象與迭代器 462
17.5 為Sentence類實(shí)現(xiàn)__iter__方法 465
17.5.1 Sentence類第 2版:經(jīng)典迭代器 465
17.5.2 不要把可迭代對(duì)象變成迭代器 466
17.5.3 Sentence類第3版:生成器函數(shù) 467
17.5.4 生成器的工作原理 468
17.6 惰性實(shí)現(xiàn)版本 470
17.6.1 Sentence類第4版:惰性生成器 470
17.6.2 Sentence類第5版:惰性生成器表達(dá)式 471
17.7 何時(shí)使用生成器表達(dá)式 473
17.8 一個(gè)等差數(shù)列生成器 474
17.9 標(biāo)準(zhǔn)庫中的生成器函數(shù) 477
17.10 可迭代的歸約函數(shù) 486
17.11 yield from:從子生成器中產(chǎn)出 487
17.11.1 重新實(shí)現(xiàn)chain 488
17.11.2 遍歷樹狀結(jié)構(gòu) 489
17.12 泛化可迭代類型 493
17.13 經(jīng)典協(xié)程 495
17.13.1 示例:使用協(xié)程計(jì)算累計(jì)平均值 496
17.13.2 讓協(xié)程返回一個(gè)值 498
17.13.3 經(jīng)典協(xié)程的泛化類型提示 501
17.14 本章小結(jié) 502
17.15 延伸閱讀 503
第 18章 with、match和else塊 507
18.1 本章新增內(nèi)容 508
18.2 上下文管理器和with塊 508
18.2.1 contextlib包中的實(shí)用工具 511
18.2.2 使用@contextmanager 512
18.3 案例分析:lis.py中的模式匹配 516
18.3.1 Scheme句法 516
18.3.2 導(dǎo)入和類型 517
18.3.3 解析器 518
18.3.4 環(huán)境 519
18.3.5 REPL 521
18.3.6 求值函數(shù) 522
18.3.7 實(shí)現(xiàn)閉包的Procedure 類529
18.3.8 使用OR模式 529
18.4 先做這個(gè),再做那個(gè):if語句之外的else塊 530
18.5 本章小結(jié) 532
18.6 延伸閱讀 533
第 19章 Python并發(fā)模型 537
19.1 本章新增內(nèi)容 538
19.2 全景概覽 538
19.3 術(shù)語定義 539
19.4 一個(gè)演示并發(fā)的“Hello World”示例 541
19.4.1 使用線程實(shí)現(xiàn)旋轉(zhuǎn)指針 541
19.4.2 使用進(jìn)程實(shí)現(xiàn)旋轉(zhuǎn)指針 544
19.4.3 使用協(xié)程實(shí)現(xiàn)旋轉(zhuǎn)指針 545
19.4.4 對(duì)比幾版supervisor函數(shù) 548
19.5 GIL真正的影響 549
19.6 自建進(jìn)程池 552
19.6.1 基于進(jìn)程的方案 554
19.6.2 理解用時(shí) 554
19.6.3 利用多核進(jìn)行素?cái)?shù)檢測的程序代碼 555
19.6.4 實(shí)驗(yàn):進(jìn)程數(shù)多一些或少一些 558
19.6.5 基于線程的方案并不可靠 559
19.7 多核世界中的Python 559
19.7.1 系統(tǒng)管理 560
19.7.2 數(shù)據(jù)科學(xué) 560
19.7.3 服務(wù)器端Web和移動(dòng)開發(fā) 561
19.7.4 WSGI應(yīng)用程序服務(wù)器 563
19.7.5 分布式任務(wù)隊(duì)列 564
19.8 本章小結(jié) 565
19.9 延伸閱讀 566
19.9.1 使用線程和進(jìn)程實(shí)現(xiàn)并發(fā) 566
19.9.2 GIL 567
19.9.3 標(biāo)準(zhǔn)庫之外的并發(fā)世界 567
19.9.4 Python之外的并發(fā)和伸縮世界 569
第 20章 并發(fā)執(zhí)行器 572
20.1 本章新增內(nèi)容 572
20.2 并發(fā)網(wǎng)絡(luò)下載 573
20.2.1 依序下載的腳本 574
20.2.2 使用concurrent.futures模塊下載 576
20.2.3 future對(duì)象在哪里 577
20.3 使用concurrent.futures啟動(dòng)進(jìn)程 580
20.4 實(shí)驗(yàn)Executor.map方法 583
20.5 顯示下載進(jìn)度并處理錯(cuò)誤 585
20.5.1 flags2系列示例處理錯(cuò)誤的方式 589
20.5.2 使用futures.as_completed函數(shù) 591
20.6 本章小結(jié) 593
20.7 延伸閱讀 594
第 21章 異步編程 596
21.1 本章新增內(nèi)容 597
21.2 一些定義 597
21.3 一個(gè)asyncio示例:探測域名 598
21.4 新概念:可異步調(diào)用對(duì)象 600
21.5 使用asyncio和HTTPX下載 601
21.5.1 原生協(xié)程的秘密:默默無聞的生成器 602
21.5.2 “不成功便成仁”問題 603
21.6 異步上下文管理器 603
21.7 增強(qiáng)asyncio版下載腳本的功能 605
21.7.1 使用asyncio.as_completed和一個(gè)線程 605
21.7.2 使用信號(hào)量限制請(qǐng)求 607
21.7.3 每次下載發(fā)起多個(gè)請(qǐng)求 610
21.8 把任務(wù)委托給執(zhí)行器 612
21.9 使用asyncio編寫服務(wù)器 613
21.9.1 一個(gè)FastAPI Web服務(wù) 614
21.9.2 一個(gè)使用asyncio編寫的TCP服務(wù)器 617
21.10 異步迭代和異步可迭代對(duì)象 622
21.10.1 異步生成器函數(shù) 623
21.10.2 異步生成器表達(dá)式和異步推導(dǎo)式 627
21.11 asyncio之外的異步世界:Curio 629
21.12 異步對(duì)象的類型提示 631
21.13 異步原理與陷阱 632
21.13.1 阻塞型調(diào)用導(dǎo)致漫長等待 633
21.13.2 I/O密集型系統(tǒng)的誤區(qū) 633
21.13.3 繞開CPU密集型陷阱 633
21.14 本章小結(jié) 634
21.15 延伸閱讀 635
第五部分 元編程
第 22章 動(dòng)態(tài)屬性和特性 641
22.1 本章新增內(nèi)容 642
22.2 使用動(dòng)態(tài)屬性轉(zhuǎn)換數(shù)據(jù) 642
22.2.1 使用動(dòng)態(tài)屬性訪問JSON類數(shù)據(jù) 643
22.2.2 處理無效屬性名 646
22.2.3 使用__new__方法靈活創(chuàng)建對(duì)象 647
22.3 計(jì)算特性 649
22.3.1 第 1步:數(shù)據(jù)驅(qū)動(dòng)屬性創(chuàng)建 650
22.3.2 第 2步:通過特性獲取鏈接的記錄 651
22.3.3 第3步:用特性覆蓋現(xiàn)有屬性 654
22.3.4 第4步:自己實(shí)現(xiàn)特性緩存 655
22.3.5 第5步:使用functools緩存特性 656
22.4 使用特性驗(yàn)證屬性 658
22.4.1 LineItem類第 1版:表示訂單中商品的類 658
22.4.2 LineItem類第 2版:能驗(yàn)證值的特性 659
22.5 特性全解析 660
22.5.1 特性覆蓋實(shí)例屬性 661
22.5.2 特性的文檔 663
22.6 定義一個(gè)特性工廠函數(shù) 664
22.7 處理屬性刪除操作 666
22.8 處理屬性的重要屬性和函數(shù) 667
22.8.1 影響屬性處理方式的特殊屬性 667
22.8.2 處理屬性的內(nèi)置函數(shù) 668
22.8.3 處理屬性的特殊方法 668
22.9 本章小結(jié) 669
22.10 延伸閱讀 670
第 23章 屬性描述符 674
23.1 本章新增內(nèi)容 675
23.2 描述符示例:屬性驗(yàn)證 675
23.2.1 LineItem類第3版:一個(gè)簡單的描述符 675
23.2.2 LineItem類第4版:為儲(chǔ)存屬性自動(dòng)命名 680
23.2.3 LineItem類第5版:一種新型描述符 681
23.3 覆蓋型描述符與非覆蓋型描述符對(duì)比 683
23.3.1 覆蓋型描述符 685
23.3.2 沒有__get__方法的覆蓋型描述符 686
23.3.3 非覆蓋型描述符 687
23.3.4 覆蓋類中的描述符 687
23.4 方法是描述符 688
23.5 描述符用法建議 690
23.6 描述符的文檔字符串和覆蓋刪除操作 691
23.7 本章小結(jié) 692
23.8 延伸閱讀 692
第 24章 類元編程 695
24.1 本章新增內(nèi)容 696
24.2 身為對(duì)象的類 696
24.3 type:內(nèi)置的類工廠函數(shù) 697
24.4 類工廠函數(shù) 698
24.5 引出__init_subclass__ 700
24.6 使用類裝飾器增強(qiáng)類的功能 706
24.7 導(dǎo)入時(shí)和運(yùn)行時(shí)比較 708
24.8 元類入門 713
24.8.1 元類如何定制類 715
24.8.2 一個(gè)友好的元類示例 715
24.8.3 元類求解時(shí)間實(shí)驗(yàn) 718
24.9 使用元類實(shí)現(xiàn)Checked類 722
24.10 元類的實(shí)際運(yùn)用 726
24.10.1 可簡化或代替元類的現(xiàn)代功能 726
24.10.2 元類是穩(wěn)定的語言功能 726
24.10.3 一個(gè)類只能有一個(gè)元類 726
24.10.4 元類應(yīng)作為實(shí)現(xiàn)細(xì)節(jié) 727
24.11 使用元類的__prepare__方法實(shí)現(xiàn)新穎的構(gòu)思 727
24.12 小結(jié) 729
24.13 本章小結(jié) 730
24.14 延伸閱讀 730
結(jié)語 733
你還可能感興趣
我要評(píng)論
|