産品特色
內容簡介
《Python Cookbook(第3版)中文版》介紹瞭Python應用在各個領域中的一些使用技巧和方法,其主題涵蓋瞭數據結構和算法,字符串和文本,數字、日期和時間,迭代器和生成器,文件和I/O,數據編碼與處理,函數,類與對象,元編程,模塊和包,網絡和Web編程,並發,實用腳本和係統管理,測試、調試以及異常,C語言擴展等。
《Python Cookbook(第3版)中文版》覆蓋瞭Python應用中的很多常見問題,並提齣瞭通用的解決方案。書中包含瞭大量實用的編程技巧和示例代碼,並在Python 3.3環境下進行瞭測試,可以很方便地應用到實際項目中去。此外,《Python Cookbook(第3版)中文版》還詳細講解瞭解決方案是如何工作的,以及為什麼能夠工作。
《Python Cookbook(第3版)中文版》非常適閤具有一定編程基礎的Python程序員閱讀參考。
作者簡介
David Beazley是一位居住在芝加哥的獨立軟件開發者以及圖書作者。他主要的工作在於編程工具,提供定製化的軟件開發服務,以及為軟件開發者、科學傢和工程師教授編程實踐課程。他為人熟知的工作在於Python編程語言,他已為此創建瞭好幾個開源的軟件包(例如Swig和PLY),並且是備受贊譽的圖書Python Essential Reference的作者。他也對C、C++以及匯編語言下的係統編程有著豐富的經驗。
Brain K. Jones是普林斯頓大學計算機係的一位係統管理員。
內頁插圖
目錄
第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 使用字符串中給定的名稱來導入模塊
前言/序言
一本關於Python的實用指南 本書是一本麵嚮Python開發者的實用指南,旨在幫助讀者更深入地理解Python語言的精髓,並掌握更高效、更具“Pythonic”風格的編程技巧。書中匯聚瞭大量精選的食譜(recipes),涵蓋瞭Python編程中常見且重要的問題,從基礎的數據結構和算法,到高級的並發編程、網絡通信以及數據處理,無所不包。每一道食譜都提供瞭一個清晰的問題陳述、一個簡潔而有效的解決方案,以及對解決方案的深入剖析。讀者可以通過閱讀和實踐這些食譜,快速學習到解決實際編程挑戰的實用方法,並從中領悟到Python的強大功能和優雅之處。 為何選擇“食譜”這種形式? “食譜”作為一種形式,非常適閤傳達實用的編程技巧。它強調的是“做什麼”和“怎麼做”,而非冗長的理論闡述。就像一本烹飪食譜,它不會告訴你食材的化學成分,而是告訴你如何將它們組閤起來,做齣美味的菜肴。Python Cookbook(第3版)中文版也是如此,它直擊開發者在實際工作中可能遇到的問題,提供開箱即用的解決方案,讓讀者能夠快速上手,解決燃眉之急。同時,每道食譜的“剖析”部分,則會引導讀者理解解決方案背後的原理,以及為何這是最佳的實踐方式。這種形式不僅易於消化,更能培養讀者舉一反三的能力,讓他們在麵對新問題時,能夠藉鑒已有的經驗,創造齣更優的解決方案。 本書涵蓋的核心主題 本書的內容經過精心組織,覆蓋瞭Python開發的各個關鍵領域,力求為讀者提供一個全麵的視角。 數據結構與算法:作為編程的基礎,本書深入探討瞭Python內置數據結構(如列錶、字典、集閤、元組)的高級用法,以及如何利用它們高效地處理數據。此外,還涵蓋瞭一些常用的算法,如排序、搜索,以及如何利用Python的強大庫來解決這些問題。例如,在處理序列數據時,讀者將學會如何利用切片、推導式以及生成器錶達式來編寫簡潔而高效的代碼。在需要查找和管理數據時,則會深入講解字典和集閤的各種技巧,以及如何通過自定義類來擴展數據結構的功能。 字符串和文本處理:在現代軟件開發中,字符串和文本處理是不可避免的任務。本書提供瞭許多處理字符串的實用技巧,包括模式匹配、文本格式化、編碼/解碼以及正則錶達式的應用。讀者將學會如何高效地解析日誌文件、處理CSV或JSON數據,以及進行復雜的文本搜索和替換操作。對於編碼問題,書中會詳細解釋不同編碼格式的區彆,並提供在Python中進行正確編碼轉換的方法。 迭代器和生成器:Python的迭代器和生成器是內存效率極高的處理大數據流的利器。本書將詳細講解如何創建和使用迭代器,以及如何利用生成器錶達式和生成器函數來簡化代碼,減少內存占用。這對於處理大型數據集、文件流或無限序列等場景尤為重要。讀者將理解惰性求值的概念,並學會編寫能夠産生無限序列的生成器。 文件和I/O:文件操作是許多應用程序的基本需求。本書提供瞭關於文件讀寫、路徑操作、臨時文件管理以及二進製數據處理的詳盡指南。讀者將學會如何安全地處理文件,如何使用上下文管理器來確保資源被正確釋放,以及如何進行更底層的I/O操作。 函數式編程:雖然Python是一門麵嚮對象的語言,但它也支持許多函數式編程的特性。本書將介紹如何利用lambda函數、map、filter、reduce以及functools模塊來編寫更簡潔、更具錶達力的代碼。讀者將學習到如何利用高階函數來簡化重復性代碼,以及如何構建更易於測試的函數。 模塊和包:組織和管理代碼是大型項目成功的關鍵。本書將深入講解Python模塊和包的創建、導入以及管理策略,幫助讀者構建結構清晰、易於維護的代碼庫。書中還會討論命名空間、相對導入和包的發布等高級主題。 麵嚮對象編程:Python強大的麵嚮對象特性在本書中也有詳細的闡述。讀者將學習如何設計類,如何利用繼承、多態和封裝來構建可復用且易於擴展的代碼。書中還會探討一些高級的麵嚮對象概念,如元類、描述符以及屬性的創建和管理。 並發和並行處理:隨著多核處理器的普及,並發和並行編程變得越來越重要。本書將介紹Python的綫程、進程以及異步I/O模型,幫助讀者編寫能夠同時執行多個任務的程序,從而提高應用程序的性能和響應能力。讀者將學習到如何使用threading、multiprocessing和asyncio模塊,並理解它們各自的優缺點和適用場景。 網絡編程:網絡通信是現代軟件開發的另一項核心技能。本書將介紹如何使用Python進行HTTP請求、構建簡單的Web服務器、處理TCP/IP套接字以及使用更高級的網絡庫。讀者將學會如何發送HTTP請求獲取網頁內容,如何構建能夠與客戶端交互的服務器,以及如何處理網絡通信中的各種異常。 數據編碼與處理:處理各種格式的數據是很多應用程序的任務。本書將提供處理JSON、XML、CSV等常見數據格式的實用技巧,以及如何進行數據序列化和反序列化。讀者將學會如何使用Python標準庫中的json、xml和csv模塊,以及如何高效地讀取和寫入這些格式的數據。 測試與調試:編寫可測試的代碼是保證軟件質量的關鍵。本書將介紹Python的測試框架(如unittest和pytest),以及如何編寫有效的單元測試和集成測試。同時,書中還會提供一些調試技巧,幫助讀者快速定位和解決代碼中的bug。 元編程:元編程是Python的一項高級特性,允許程序在運行時檢查、修改或生成代碼。本書將介紹一些元編程的概念和技術,如裝飾器、描述符和元類,幫助讀者編寫更靈活、更強大的代碼。 本書的優勢與特色 實用性強,代碼示例豐富:本書最大的特點就是其極強的實用性。每一道食譜都緊密圍繞實際開發場景,提供的代碼示例清晰、簡潔且可直接運行。讀者可以從中快速找到解決自己問題的靈感和方法。 深入剖析,理解原理:除瞭提供解決方案,本書更注重對解決方案背後原理的深入剖析。通過理解這些原理,讀者不僅能夠掌握一個具體的技巧,更能舉一反三,觸類旁通,在麵對其他問題時也能找到最優的解決方案。 “Pythonic”的編碼風格:本書強調的是“Pythonic”的編碼風格,即遵循Python的哲學和慣例,編寫齣簡潔、優雅、易於閱讀和維護的代碼。通過學習本書,讀者將能夠提升自己的代碼質量,寫齣更具Python特色的程序。 涵蓋廣泛,適閤不同水平的開發者:本書的內容既包含瞭一些基礎但重要的Python技巧,也涉及瞭一些高級的主題。無論你是剛入門的Python新手,還是經驗豐富的Python開發者,都能在本書中找到適閤自己的內容。對於新手,可以將其作為學習Python實用技巧的入門指南;對於有經驗的開發者,則可以將其作為提升技能、拓寬視野的參考。 中文版,閱讀更順暢:本書的中文版更是為廣大中文讀者提供瞭便利。譯者力求準確傳達原書的思想和技術要點,確保讀者能夠以最少的語言障礙,最流暢地理解和吸收書中的內容。 如何閱讀本書? 你可以選擇從頭到尾閱讀本書,係統地學習Python的各項知識。但更推薦的方式是,根據你在實際開發中遇到的問題,查找相應的食譜進行閱讀。遇到問題時,翻開本書,找到相關的章節,相信你一定能找到有效的解決方案。在學習的過程中,積極動手實踐書中的代碼示例,嘗試修改和擴展它們,這樣纔能真正地掌握這些技巧。 總結 Python Cookbook(第3版)中文版是一本不可多得的Python實用編程指南。它以“食譜”的形式,將復雜的編程問題分解為一個個易於理解和解決的小單元,並通過深入的剖析,幫助讀者理解背後的原理。本書涵蓋的主題廣泛,代碼示例豐富,強調“Pythonic”的編碼風格,無論你是初學者還是資深開發者,都能從中獲益匪淺。如果你想成為一名更優秀的Python開發者,那麼這本書絕對是你案頭的必備良書。它將是你解決編程難題、提升編程效率、寫齣優雅Python代碼的得力助手。