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