《Python Cookbook(第3版)中文版》介紹了Python應(yīng)用在各個(gè)領(lǐng)域中的一些使用技巧和方法,其主題涵蓋了數(shù)據(jù)結(jié)構(gòu)和算法,字符串和文本,數(shù)字、日期和時(shí)間,迭代器和生成器,文件和I/O,數(shù)據(jù)編碼與處理,函數(shù),類與對(duì)象,元編程,模塊和包,網(wǎng)絡(luò)和Web編程,并發(fā),實(shí)用腳本和系統(tǒng)管理,測(cè)試、調(diào)試以及異常,C語(yǔ)言擴(kuò)展等。
《Python Cookbook(第3版)中文版》覆蓋了Python應(yīng)用中的很多常見問(wèn)題,并提出了通用的解決方案。書中包含了大量實(shí)用的編程技巧和示例代碼,并在Python 3.3環(huán)境下進(jìn)行了測(cè)試,可以很方便地應(yīng)用到實(shí)際項(xiàng)目中去。此外,《Python Cookbook(第3版)中文版》還詳細(xì)講解了解決方案是如何工作的,以及為什么能夠工作。
《Python Cookbook(第3版)中文版》非常適合具有一定編程基礎(chǔ)的Python程序員閱讀參考。
David Beazley是一位居住在芝加哥的獨(dú)立軟件開發(fā)者以及圖書作者。他主要的工作在于編程工具,提供定制化的軟件開發(fā)服務(wù),以及為軟件開發(fā)者、科學(xué)家和工程師教授編程實(shí)踐課程。他最為人熟知的工作在于Python編程語(yǔ)言,他已為此創(chuàng)建了好幾個(gè)開源的軟件包(例如Swig和PLY),并且是備受贊譽(yù)的圖書Python Essential Reference的作者。他也對(duì)C、C++以及匯編語(yǔ)言下的系統(tǒng)編程有著豐富的經(jīng)驗(yàn)。
Brain K. Jones是普林斯頓大學(xué)計(jì)算機(jī)系的一位系統(tǒng)管理員。
第1章 數(shù)據(jù)結(jié)構(gòu)和算法 1
1.1 將序列分解為單獨(dú)的變量 1
1.2 從任意長(zhǎng)度的可迭代對(duì)象中分解元素 3
1.3 保存最后N個(gè)元素 5
1.4 找到最大或最小的N個(gè)元素 7
1.5 實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列 9
1.6 在字典中將鍵映射到多個(gè)值上 11
1.7 讓字典保持有序 13
1.8 與字典有關(guān)的計(jì)算問(wèn)題 14
1.9 在兩個(gè)字典中尋找相同點(diǎn) 15
1.10 從序列中移除重復(fù)項(xiàng)且保持元素間順序不變 17
1.11 對(duì)切片命名 18
1.12 找出序列中出現(xiàn)次數(shù)最多的元素 20
1.13 通過(guò)公共鍵對(duì)字典列表排序 22
1.14 對(duì)不原生支持比較操作的對(duì)象排序 23
1.15 根據(jù)字段將記錄分組 25
1.16 篩選序列中的元素 26
1.17 從字典中提取子集 29
1.18 將名稱映射到序列的元素中 30
1.19 同時(shí)對(duì)數(shù)據(jù)做轉(zhuǎn)換和換算 33
1.20 將多個(gè)映射合并為單個(gè)映射 34
第2章 字符串和文本 37
2.1 針對(duì)任意多的分隔符拆分字符串 37
2.2 在字符串的開頭或結(jié)尾處做文本匹配 38
2.3 利用Shell通配符做字符串匹配 40
2.4 文本模式的匹配和查找 42
2.5 查找和替換文本 45
2.6 以不區(qū)分大小寫的方式對(duì)文本做查找和替換 47
2.7 定義實(shí)現(xiàn)最短匹配的正則表達(dá)式 48
2.8 編寫多行模式的正則表達(dá)式 49
2.9 將Unicode文本統(tǒng)一表示為規(guī)范形式 50
2.10 用正則表達(dá)式處理Unicode字符 52
2.11 從字符串中去掉不需要的字符 53
2.12 文本過(guò)濾和清理 54
2.13 對(duì)齊文本字符串 57
2.14 字符串連接及合并 59
2.15 給字符串中的變量名做插值處理 62
2.16 以固定的列數(shù)重新格式化文本 64
2.17 在文本中處理HTML和XML實(shí)體 66
2.18 文本分詞 67
2.19 編寫一個(gè)簡(jiǎn)單的遞歸下降解析器 70
2.20 在字節(jié)串上執(zhí)行文本操作 80
第3章 數(shù)字、日期和時(shí)間 83
3.1 對(duì)數(shù)值進(jìn)行取整 83
3.2 執(zhí)行精確的小數(shù)計(jì)算 85
3.3 對(duì)數(shù)值做格式化輸出 87
3.4 同二進(jìn)制、八進(jìn)制和十六進(jìn)制數(shù)打交道 89
3.5 從字節(jié)串中打包和解包大整數(shù) 90
3.6 復(fù)數(shù)運(yùn)算 92
3.7 處理窮大和NaN 94
3.8 分?jǐn)?shù)的計(jì)算 96
3.9 處理大型數(shù)組的計(jì)算 97
3.10 矩陣和線性代數(shù)的計(jì)算 101
3.11 隨機(jī)選擇 103
3.12 時(shí)間換算 105
3.13 計(jì)算上周5的日期 107
3.14 找出當(dāng)月的日期范圍 108
3.15 將字符串轉(zhuǎn)換為日期 110
3.16 處理涉及到時(shí)區(qū)的日期問(wèn)題 112
第4章 迭代器和生成器 114
4.1 手動(dòng)訪問(wèn)迭代器中的元素 114
4.2 委托迭代 115
4.3 用生成器創(chuàng)建新的迭代模式 116
4.4 實(shí)現(xiàn)迭代協(xié)議 118
4.5 反向迭代 121
4.6 定義帶有額外狀態(tài)的生成器函數(shù) 122
4.7 對(duì)迭代器做切片操作 123
4.8 跳過(guò)可迭代對(duì)象中的前一部分元素 124
4.9 迭代所有可能的組合或排列 127
4.10 以索引-值對(duì)的形式迭代序列 129
4.11 同時(shí)迭代多個(gè)序列 131
4.12 在不同的容器中進(jìn)行迭代 133
4.13 創(chuàng)建處理數(shù)據(jù)的管道 134
4.14 扁平化處理嵌套型的序列 137
4.15 合并多個(gè)有序序列,再對(duì)整個(gè)有序序列進(jìn)行迭代 139
4.16 用迭代器取代while循環(huán) 140
第5章 文件和I/O 142
5.1 讀寫文本數(shù)據(jù) 142
5.2 將輸出重定向到文件中 145
5.3 以不同的分隔符或行結(jié)尾符完成打印 145
5.4 讀寫二進(jìn)制數(shù)據(jù) 146
5.5 對(duì)已不存在的文件執(zhí)行寫入操作 149
5.6 在字符串上執(zhí)行I/O操作 150
5.7 讀寫壓縮的數(shù)據(jù)文件 151
5.8 對(duì)固定大小的記錄進(jìn)行迭代 152
5.9 將二進(jìn)制數(shù)據(jù)讀取到可變緩沖區(qū)中 153
5.10 對(duì)二進(jìn)制文件做內(nèi)存映射 155
5.11 處理路徑名 157
5.12 檢測(cè)文件是否存在 158
5.13 獲取目錄內(nèi)容的列表 159
5.14 繞過(guò)文件名編碼 161
5.15 打印法解碼的文件名 162
5.16 為已經(jīng)打開的文件添加或修改編碼方式 164
5.17 將字節(jié)數(shù)據(jù)寫入文本文件 166
5.18 將已有的文件描述符包裝為文件對(duì)象 167
5.19 創(chuàng)建臨時(shí)文件和目錄 169
5.20 同串口進(jìn)行通信 171
5.21 序列化Python對(duì)象 172
第6章 數(shù)據(jù)編碼與處理 177
6.1 讀寫CSV數(shù)據(jù) 177
6.2 讀寫JSON數(shù)據(jù) 181
6.3 解析簡(jiǎn)單的XML文檔 186
6.4 以增量方式解析大型XML文件 188
6.5 將字典轉(zhuǎn)換為XML 192
6.6 解析、修改和重寫XML 194
6.7 用命名空間來(lái)解析XML文檔 196
6.8 同關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行交互 198
6.9 編碼和解碼十六進(jìn)制數(shù)字 201
6.10 Base64編碼和解碼 202
6.11 讀寫二進(jìn)制結(jié)構(gòu)的數(shù)組 203
6.12 讀取嵌套型和大小可變的二進(jìn)制結(jié)構(gòu) 207
6.13 數(shù)據(jù)匯總和統(tǒng)計(jì) 218
第7章 函數(shù) 221
7.1 編寫可接受任意數(shù)量參數(shù)的函數(shù) 221
7.2 編寫只接受關(guān)鍵字參數(shù)的函數(shù) 223
7.3 將元數(shù)據(jù)信息附加到函數(shù)參數(shù)上 224
7.4 從函數(shù)中返回多個(gè)值 225
7.5 定義帶有默認(rèn)參數(shù)的函數(shù) 226
7.6 定義匿名或內(nèi)聯(lián)函數(shù) 229
7.7 在匿名函數(shù)中綁定變量的值 230
7.8 讓帶有N個(gè)參數(shù)的可調(diào)用對(duì)象以較少的參數(shù)形式調(diào)用 232
7.9 用函數(shù)替代只有單個(gè)方法的類 235
7.10 在回調(diào)函數(shù)中攜帶額外的狀態(tài) 236
7.11 內(nèi)聯(lián)回調(diào)函數(shù) 240
7.12 訪問(wèn)定義在閉包內(nèi)的變量 242
第8章 類與對(duì)象 246
8.1 修改實(shí)例的字符串表示 246
8.2 自定義字符串的輸出格式 248
8.3 讓對(duì)象支持上下文管理協(xié)議 249
8.4 當(dāng)創(chuàng)建大量實(shí)例時(shí)如何節(jié)省內(nèi)存 251
8.5 將名稱封裝到類中 252
8.6 創(chuàng)建可管理的屬性 254
8.7 調(diào)用父類中的方法 259
8.8 在子類中擴(kuò)展屬性 263
8.9 創(chuàng)建一種新形式的類屬性或?qū)嵗龑傩?267
8.10 讓屬性具有惰性求值的能力 271
8.11 簡(jiǎn)化數(shù)據(jù)結(jié)構(gòu)的初始化過(guò)程 274
8.12 定義一個(gè)接口或抽象基類 278
8.13 實(shí)現(xiàn)一種數(shù)據(jù)模型或類型系統(tǒng) 281
8.14 實(shí)現(xiàn)自定義的容器 287
8.15 委托屬性的訪問(wèn) 291
8.16 在類中定義多個(gè)構(gòu)造函數(shù) 296
8.17 不通過(guò)調(diào)用init來(lái)創(chuàng)建實(shí)例 298
8.18 用Mixin技術(shù)來(lái)擴(kuò)展類定義 299
8.19 實(shí)現(xiàn)帶有狀態(tài)的對(duì)象或狀態(tài)機(jī) 305
8.20 調(diào)用對(duì)象上的方法,方法名以字符串形式給出 311
8.21 實(shí)現(xiàn)訪問(wèn)者模式 312
8.22 實(shí)現(xiàn)非遞歸的訪問(wèn)者模式 317
8.23 在環(huán)狀數(shù)據(jù)結(jié)構(gòu)中管理內(nèi)存 324
8.24 讓類支持比較操作 327
8.25 創(chuàng)建緩存實(shí)例 330
第9章 元編程 335
9.1 給函數(shù)添加一個(gè)包裝 335
9.2 編寫裝飾器時(shí)如何保存函數(shù)的元數(shù)據(jù) 337
9.3 對(duì)裝飾器進(jìn)行解包裝 339
9.4 定義一個(gè)可接受參數(shù)的裝飾器 341
9.5 定義一個(gè)屬性可由用戶修改的裝飾器 342
9.6 定義一個(gè)能接收可選參數(shù)的裝飾器 346
9.7 利用裝飾器對(duì)函數(shù)參數(shù)強(qiáng)制執(zhí)行類型檢查 348
9.8 在類中定義裝飾器 352
9.9 把裝飾器定義成類 354
9.10 把裝飾器作用到類和靜態(tài)方法上 357
9.11 編寫裝飾器為被包裝的函數(shù)添加參數(shù) 359
9.12 利用裝飾器給類定義打補(bǔ)丁 362
9.13 利用元類來(lái)控制實(shí)例的創(chuàng)建 364
9.14 獲取類屬性的定義順序 367
9.15 定義一個(gè)能接受可選參數(shù)的元類 370
9.16 在*args和**kwargs上強(qiáng)制規(guī)定一種參數(shù)簽名 372
9.17 在類中強(qiáng)制規(guī)定編碼約定 375
9.18 通過(guò)編程的方式來(lái)定義類 378
9.19 在定義的時(shí)候初始化類成員 382
9.20 通過(guò)函數(shù)注解來(lái)實(shí)現(xiàn)方法重載 384
9.21 避免出現(xiàn)重復(fù)的屬性方法 391
9.22 以簡(jiǎn)單的方式定義上下文管理器 393
9.23 執(zhí)行帶有局部副作用的代碼 395
9.24 解析并分析Python源代碼 398
9.25 將Python源碼分解為字節(jié)碼 402
第10章 模塊和包 406
10.1 把模塊按層次結(jié)構(gòu)組織成包 406
10.2 對(duì)所有符號(hào)的導(dǎo)入進(jìn)行精確控制 407
10.3 用相對(duì)名稱來(lái)導(dǎo)入包中的子模塊 408
10.4 將模塊分解成多個(gè)文件 410
10.5 讓各個(gè)目錄下的代碼在統(tǒng)一的命名空間下導(dǎo)入 413
10.6 重新加載模塊 415
10.7 讓目錄或zip文件成為可運(yùn)行的腳本 416
10.8 讀取包中的數(shù)據(jù)文件 417
10.9 添加目錄到sys.path中 418
10.10 使用字符串中給定的名稱來(lái)導(dǎo)入模塊