Python Cookbook目錄

第1章 數據結構和算法 1

1.1 將序列分解為單獨的變量 1

1.2 從任意長度的可迭代對象中分解元素 3

1.3 保存最后N個元素 5

1.4 找到最大或最小的N個元素 7

1.5 實現優先級隊列 9

1.6 在字典中將鍵映射到多個值上 11

1.7 讓字典保持有序 13

1.8 與字典有關的計算問題 14

1.9 在兩個字典中尋找相同點 15

1.10 從序列中移除重復項且保持元素間順序不變 17

1.11 對切片命名 18

1.12 找出序列中出現次數最多的元素 20

1.13 通過公共鍵對字典列表排序 22

1.14 對不原生支持比較操作的對象排序 23

1.15 根據字段將記錄分組 25

1.16 篩選序列中的元素 26

1.17 從字典中提取子集 29

1.18 將名稱映射到序列的元素中 30

1.19 同時對數據做轉換和換算 33

1.20 將多個映射合并為單個映射 34

第2章 字符串和文本 37

2.1 針對任意多的分隔符拆分字符串 37

2.2 在字符串的開頭或結尾處做文本匹配 38

2.3 利用Shell通配符做字符串匹配 40

2.4 文本模式的匹配和查找 42

2.5 查找和替換文本 45

2.6 以不區分大小寫的方式對文本做查找和替換 47

2.7 定義實現最短匹配的正則表達式 48

2.8 編寫多行模式的正則表達式 49

2.9 將Unicode文本統一表示為規范形式 50

2.10 用正則表達式處理Unicode字符 52

2.11 從字符串中去掉不需要的字符 53

2.12 文本過濾和清理? 54

2.13 對齊文本字符串? 57

2.14 字符串連接及合并? 59

2.15 給字符串中的變量名做插值處理 62

2.16 以固定的列數重新格式化文本 64

2.17 在文本中處理HTML和XML實體 66

2.18 文本分詞? 67

2.19 編寫一個簡單的遞歸下降解析器 70

2.20 在字節串上執行文本操作 80

第3章數字、日期和時間 83

3.1 對數值進行取整 83

3.2 執行精確的小數計算 85

3.3 對數值做格式化輸出 87

3.4 同二進制、八進制和十六進制數打交道 89

3.5 從字節串中打包和解包大整數 90

3.6 復數運算 92

3.7 處理無窮大和NaN 94

3.8 分數的計算 96

3.9 處理大型數組的計算 97

3.10 矩陣和線性代數的計算 101

3.11 隨機選擇 103

3.12 時間換算 105

3.13 計算上周5的日期 107

3.14 找出當月的日期范圍 108

3.15 將字符串轉換為日期 110

3.16 處理涉及到時區的日期問題 112

第4章 迭代器和生成器 114

4.1 手動訪問迭代器中的元素 114

4.2 委托迭代 115

4.3 用生成器創建新的迭代模式 116

4.4 實現迭代協議 118

4.5 反向迭代 121

4.6 定義帶有額外狀態的生成器函數 122

4.7 對迭代器做切片操作 123

4.8 跳過可迭代對象中的前一部分元素 124

4.9 迭代所有可能的組合或排列 127

4.10 以索引-值對的形式迭代序列 129

4.11 同時迭代多個序列 131

4.12 在不同的容器中進行迭代 133

4.13 創建處理數據的管道 134

4.14 扁平化處理嵌套型的序列 137

4.15 合并多個有序序列,再對整個有序序列進行迭代 139

4.16 用迭代器取代while循環 140

第5章 文件和I/O 142

5.1 讀寫文本數據 142

5.2 將輸出重定向到文件中 145

5.3 以不同的分隔符或行結尾符完成打印 145

5.4 讀寫二進制數據 146

5.5 對已不存在的文件執行寫入操作 149

5.6 在字符串上執行I/O操作 150

5.7 讀寫壓縮的數據文件 151

5.8 對固定大小的記錄進行迭代 152

5.9 將二進制數據讀取到可變緩沖區中 153

5.10 對二進制文件做內存映射 155

5.11 處理路徑名 157

5.12 檢測文件是否存在 158

5.13 獲取目錄內容的列表 159

5.14 繞過文件名編碼 161

5.15 打印無法解碼的文件名 162

5.16 為已經打開的文件添加或修改編碼方式 164

5.17 將字節數據寫入文本文件 166

5.18 將已有的文件描述符包裝為文件對象 167

5.19 創建臨時文件和目錄 169

5.20 同串口進行通信 171

5.21 序列化Python對象 172

第6章 數據編碼與處理 177

6.1 讀寫CSV數據 177

6.2 讀寫JSON數據 181

6.3 解析簡單的XML文檔 186

6.4 以增量方式解析大型XML文件 188

6.5 將字典轉換為XML 192

6.6 解析、修改和重寫XML 194

6.7 用命名空間來解析XML文檔 196

6.8 同關系型數據庫進行交互 198

6.9 編碼和解碼十六進制數字 201

6.10 Base64編碼和解碼 202

6.11 讀寫二進制結構的數組 203

6.12讀取嵌套型和大小可變的二進制結構 207

6.13數據匯總和統計 218

第7章 函數 221

7.1 編寫可接受任意數量參數的函數 221

7.2 編寫只接受關鍵字參數的函數 223

7.3 將元數據信息附加到函數參數上 224

7.4 從函數中返回多個值 225

7.5 定義帶有默認參數的函數 226

7.6 定義匿名或內聯函數 229

7.7 在匿名函數中綁定變量的值 230

7.8 讓帶有N個參數的可調用對象以較少的參數形式調用 232

7.9 用函數替代只有單個方法的類 235

7.10 在回調函數中攜帶額外的狀態 236

7.11 內聯回調函數 240

7.12 訪問定義在閉包內的變量 242

第8章 類與對象 246

8.1 修改實例的字符串表示 246

8.2 自定義字符串的輸出格式 248

8.3 讓對象支持上下文管理協議 249

8.4 當創建大量實例時如何節省內存 251

8.5 將名稱封裝到類中 252

8.6 創建可管理的屬性 254

8.7 調用父類中的方法 259

8.8 在子類中擴展屬性 263

8.9 創建一種新形式的類屬性或實例屬性 267

8.10 讓屬性具有惰性求值的能力 271

8.11 簡化數據結構的初始化過程 274

8.12 定義一個接口或抽象基類 278

8.13 實現一種數據模型或類型系統 281

8.14 實現自定義的容器 287

8.15 委托屬性的訪問 291

8.16 在類中定義多個構造函數 296

8.17 不通過調用init來創建實例 298

8.18 用Mixin技術來擴展類定義 299

8.19 實現帶有狀態的對象或狀態機 305

8.20 調用對象上的方法,方法名以字符串形式給出 311

8.21 實現訪問者模式 312

8.22 實現非遞歸的訪問者模式 317

8.23 在環狀數據結構中管理內存? 324

8.24 讓類支持比較操作 327

8.25 創建緩存實例 330

第9章 元編程 335

9.1 給函數添加一個包裝 335

9.2 編寫裝飾器時如何保存函數的元數據 337

9.3 對裝飾器進行解包裝 339

9.4 定義一個可接受參數的裝飾器 341

9.5 定義一個屬性可由用戶修改的裝飾器 342

9.6 定義一個能接收可選參數的裝飾器 346

9.7 利用裝飾器對函數參數強制執行類型檢查 348

9.8 在類中定義裝飾器 352

9.9 把裝飾器定義成類 354

9.10 把裝飾器作用到類和靜態方法上 357

9.11 編寫裝飾器為被包裝的函數添加參數 359

9.12 利用裝飾器給類定義打補丁 362

9.13 利用元類來控制實例的創建 364

9.14 獲取類屬性的定義順序 367

9.15 定義一個能接受可選參數的元類 370

9.16 在*args和**kwargs上強制規定一種參數簽名 372

9.17 在類中強制規定編碼約定 375

9.18 通過編程的方式來定義類 378

9.19 在定義的時候初始化類成員 382

9.20 通過函數注解來實現方法重載 384

9.21 避免出現重復的屬性方法 391

9.22 以簡單的方式定義上下文管理器 393

9.23 執行帶有局部副作用的代碼 395

9.24 解析并分析Python源代碼 398

9.25 將Python源碼分解為字節碼 402

第10章 模塊和包 406

10.1 把模塊按層次結構組織成包 406

10.2 對所有符號的導入進行精確控制 407

10.3 用相對名稱來導入包中的子模塊 408

10.4 將模塊分解成多個文件 410

10.5 讓各個目錄下的代碼在統一的命名空間下導入 413

10.6 重新加載模塊 415

10.7 讓目錄或zip文件成為可運打的腳本 416

10.8 讀取包中的數據文件 417

10.9 添加目錄到sys.path中 418

10.10 使用字符串中給定的名稱來導入模塊 420

10.11 利用import鉤子從遠端機器上加載模塊 421

10.12 在模塊加載時為其打補丁 439

10.13 安裝只為自己所用的包 441

10.14 創建新的Python環境 442

10.15 發布自定義的包 444

第11章 網絡和Web編程 446

11.1 以客戶端的形式同HTTP服務交互 446

11.2 創建一個TCP服務器 450

11.3 創建一個UDP服務器 454

11.4 從CIDR地址中生成IP地址的范圍 456

11.5 創建基于REST風格的簡單接口 458

11.6 利用XML-RPC實現簡單的遠端過程調用 463

11.7 在不同的解釋器間進行通信 466

11.8 實現遠端過程調用 468

11.9 以簡單的方式驗證客戶端身份 472

11.10 為網絡服務增加SSL支持 474

11.11 在進程間傳遞socket文件描述符 481

11.12 理解事件驅動型I/O 486

11.13 發送和接收大型數組 493

第12章 并發 496

12.1 啟動和停止線程 496

12.2 判斷線程是否已經啟動 499

12.3 線程間通信 503

12.4 對臨界區加鎖 508

12.5 避免死鎖 511

12.6 保存線程專有狀態 515

12.7 創建線程池 517

12.8 實現簡單的并行編程 521

12.9 如何規避GIL帶來的限制 525

12.10? 定義一個Actor任務 528

12.11 實現發布者/訂閱者消息模式 532

12.12 使用生成器作為線程的替代方案 536

12.13 輪詢多個線程隊列 544

12.14 在UNIX上加載守護進程 547

第13章 實用腳本和系統管理 552

13.1 通過重定向、管道或輸入文件來作為腳本的輸入 552

13.2 終止程序并顯示錯誤信息 553

13.3 解析命令行選項 554

13.4 在運行時提供密碼輸入提示 557

13.5 獲取終端大小 558

13.6 執行外部命令并獲取輸出 558

13.7 拷貝或移動文件和目錄 560

13.8 創建和解包歸檔文件 562

13.9 通過名稱來查找文件 563

13.10 讀取配置文件 565

13.11 給腳本添加日志記錄 568

13.12 給庫添加日志記錄 571

13.13 創建一個秒表計時器 573

13.14 給內存和CPU使用量設定限制 575

13.15 加載Web瀏覽器 576

第14章 測試、調試以及異常 578

14.1 測試發送到stdout上的輸出 578

14.2 在單元測試中為對象打補丁 579

14.3 在單元測試中檢測異常情況 583

14.4 將測試結果作為日志記錄到文件中 585

14.5 跳過測試,或者預計測試結果為失敗 586

14.6 處理多個異常 587

14.7 捕獲所有的異常 589

14.8 創建自定義的異常 591

14.9 通過引發異常來響應另一個異常 593

14.10 重新拋出上一個異常 595

14.11 發出告警信息 596

14.12 對基本的程序崩潰問題進行調試 598

14.13 對程序做性能分析以及計時統計 600

14.14 讓你的程序運行得更快 603

第15章 C語言擴展 610

15.1 利用ctypes來訪問C代碼 612

15.2 編寫簡單的C語言擴展模塊 618

15.3 編寫一個可操作數組的擴展函數 622

15.4 在C擴展模塊中管理不透明指針 625

15.5 在擴展模塊中定義并導出C API 628

15.6 從C中調用 Python 633

15.7 在C擴展模塊中釋放GIL 639

15.8 混合使用C和Python環境中的線程 639

15.9 用Swig來包裝C代碼 640

15.10 用Cython來包裝C代碼 646

15.11 用Cython來高效操作數組 652

15.12 把函數指針轉換為可調用對象 657

15.13 把以NULL結尾的字符串傳給C庫 659

15.14 把Unicode字符串傳遞給C庫 663

15.15 把C字符串轉換到Python中 667

15.16 同編碼方式不確定的C字符串打交道 669

15.17 把文件名傳給C擴展模塊 672

15.18 把打開的文件傳給C擴展模塊 673

15.19 在C中讀取文件型對象 674

15.20 從C中訪問可迭代對象 677

15.21 排查段錯誤 678

附錄A 補充閱讀 680

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,517評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,087評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,521評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,493評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,207評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,603評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,624評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,813評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,364評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,110評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,305評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,874評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,532評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,953評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,209評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,033評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,268評論 2 375

推薦閱讀更多精彩內容