《Python核心編程(第二版)》是經典的Python指導書,在版的基礎上進行了升級。全書分為兩個部分:第1部分占據了大約三分之二的篇幅,闡釋這門語言的“核心”內容,包括基本的概念和語句、語法和風格、Python對象、數字類型、序列類型、映射和集合類型、條件和循環、文件和輸入/輸出、錯誤和異常、函數和函數式編程、模塊、面向對象編程、執行環境等內容:第2部分則提供了各種高級主題來展示可以使用Python做些什么,包括正則表達式、網絡編程、網絡客戶端編程、多線程編程、圖形用戶界面編程、Web編程、數據庫編程、擴展Python 和一些其他材料。
對Python核心特性系統的專家級講解;
為開發復雜的應用程序和軟件所需的強大深入的視角;
易用的圖表,詳細描述了Python 模塊、操作符、函數和方法;
大量的專業級的實例代碼,從小的代碼片段到功能齊全的應用程序一應俱全。
目 錄
第1部分 Python核心
第1章 歡迎來到Python世界 3
1.1 什么是Python 4
1.2 起源 4
1.3 特點 4
1.3.1 高級 4
1.3.2 面向對象 5
1.3.3 可升級 5
1.3.4 可擴展 5
1.3.5 可移植性 5
1.3.6 易學 6
1.3.7 易讀 6
1.3.8 易維護 6
1.3.9 健壯性 6
1.3.10 高效的快速原型開發工具 6
1.3.11 內存管理器 7
1.3.12 解釋性和(字節)編譯性 7
1.4 下載和安裝Python 7
1.5 運行Python 8
1.5.1 命令行上的交互式解釋器 9
1.5.2 從命令行啟動腳本 10
1.5.3 集成開發環境 11
1.5.4 其他的集成開發環境和執行環境 14
1.6 Python文檔 15
1.7 比較Python(Python與其他語言的比較) 15
1.8 其他實現 17
1.9 練習 18
第2章 快速入門 19
2.1 程序輸出,print語句及“Hello World!” 20
2.2 程序輸入和raw_input()內建函數 21
2.3 注釋 22
2.4 操作符 22
2.5 變量和賦值 24
2.6 數字 24
2.7 字符串 25
2.8 列表和元組 26
2.9 字典 26
2.10 代碼塊及縮進對齊 27
2.11 if語句 27
2.12 while循環 28
2.13 for循環和range()內建函數 28
2.14 列表解析 30
2.15 文件和內建函數open()、file() 30
2.16 錯誤和異常 31
2.17 函數 32
2.17.1 如何定義函數 32
2.17.2 如何調用函數 32
2.17.3 默認參數 33
2.18 類 33
2.19 模塊 35
2.19.1 如何導入模塊 35
2.19.2 如何訪問一個模塊函數或訪問一個模塊變量 35
2.20 實用的函數 36
2.21 練習 36
第3章 Python基礎 39
3.1 語句和語法 40
3.1.1 注釋(#) 40
3.1.2 繼續(\) 40
3.1.3 多個語句構成代碼組(:) 41
3.1.4 代碼組由不同的縮進分隔 41
3.1.5 同一行書寫多個語句(;) 41
3.1.6 模塊 41
3.2 變量賦值 42
3.2.1 賦值操作符 42
3.2.2 增量賦值 42
3.2.3 多重賦值 43
3.2.4 “多元”賦值 43
3.3 標識符 44
3.3.1 合法的Python標識符 44
3.3.2 關鍵字 44
3.3.3 內建 45
3.3.4 專用下劃線標識符 45
3.4 基本風格指南 45
3.4.1 模塊結構和布局 46
3.4.2 在主程序中書寫測試代碼 48
3.5 內存管理 49
3.5.1 變量定義 49
3.5.2 動態類型 49
3.5.3 內存分配 49
3.5.4 引用計數 50
3.5.5 垃圾收集 51
3.6 及時個Python程序 51
3.7 相關模塊和開發工具 54
3.8 練習 55
第4章 Python對象 56
4.1 Python 對象 57
4.2 標準類型 57
4.3 其他內建類型 58
4.3.1 類型對象和type類型對象 58
4.3.2 None--Python的Null對象 58
4.4 內部類型 59
4.4.1 代碼對象 59
4.4.2 幀對象 60
4.4.3 跟蹤記錄對象 60
4.4.4 切片對象 60
4.4.5 省略對象 60
4.4.6 XRange 對象 60
4.5 標準類型操作符 61
4.5.1 對象值的比較 61
4.5.2 對象身份比較 61
4.5.3 布爾類型 64
4.6 標準類型內建函數 64
4.6.1 type() 64
4.6.2 cmp() 65
4.6.3 str()和repr()(及``操作符) 66
4.6.4 type()和isinstance() 67
4.6.5 Python類型操作符和內建函數總結 70
4.7 類型工廠函數 70
4.8 標準類型的分類 71
4.8.1 存儲模型 71
4.8.2 更新模型 72
4.8.3 訪問模型 73
4.9 不支持的類型 74
4.10 練習 75
第5章 數字 76
5.1 數字簡介 77
5.1.1 如何創建數值對象并用其賦值(數字對象) 77
5.1.2 如何更新數字對象 77
5.1.3 如何刪除數字對象 77
5.2 整型 77
5.2.1 布爾型 78
5.2.2 標準整型 78
5.2.3 長整型 78
5.2.4 整型和長整型的統一 79
5.3 雙精度浮點型 79
5.4 復數 80
5.5 操作符 81
5.5.1 混合模式操作符 81
5.5.2 標準類型操作符 82
5.5.3 算術操作符 82
5.5.4 位操作符(只適用于整型) 86
5.6 內建函數與工廠函數 87
5.6.1 標準類型函數 87
5.6.2 數字類型函數 87
5.6.3 僅用于整型的函數 92
5.7 其他數字類型 93
5.7.1 布爾“數” 93
5.7.2 十進制浮點型 94
5.8 相關模塊 95
5.9 練習 97
第6章 序列:字符串、列表和元組 100
6.1 序列 101
6.1.1 標準類型操作符 101
6.1.2 序列類型操作符 101
6.1.3 內建函數(BIF) 106
6.2 字符串 107
6.3 字符串和操作符 109
6.3.1 標準類型操作符 109
6.3.2 序列操作符切片([]和[:]) 109
6.4 只適用于字符串的操作符 114
6.4.1 格式化操作符(%) 114
6.4.2 字符串模板: 更簡單的替代品 117
6.4.3 原始字符串操作符(r/R) 118
6.4.4 Unicode字符串操作符(u/U) 119
6.5 內建函數 119
6.5.1 標準類型函數 119
6.5.2 序列類型函數 119
6.5.3 字符串類型函數 120
6.6 字符串內建函數 121
6.7 字符串的獨特特性 124
6.7.1 特殊字符串和控制字符 124
6.7.2 三引號 125
6.7.3 字符串不變性 126
6.8 Unicode 127
6.8.1 術語 127
6.8.2 什么是Unicode 128
6.8.3 怎樣使用Unicode 128
6.8.4 Codec是什么 129
6.8.5 編碼解碼 129
6.8.6 把Unicode應用到實際應用中 130
6.8.7 從現實中得來的教訓 131
6.8.8 Python的Unicode支持 131
6.9 相關模塊 133
6.10 字符串關鍵點總結 134
6.11 列表 134
6.12 操作符 136
6.12.1 標準類型操作符 136
6.12.2 序列類型操作符 136
6.12.3 列表類型操作符和列表解析 139
6.13 內建函數 139
6.13.1 標準類型函數 139
6.13.2 序列類型函數 140
6.13.3 列表類型內建函數 142
6.14 列表類型的內建函數 142
6.15 列表的特殊特性 145
6.16 元組 151
6.17 元組操作符和內建函數 152
6.17.1 標準類型操作符、序列類型操作符和內建函數 152
6.17.2 元組類型操作符和內建函數、內建方法 153
6.18 元組的特殊特性 153
6.18.1 不可變性給元組帶來了什么影響 153
6.18.2 元組也不是那么“不可變” 153
6.18.3 默認集合類型 154
6.18.4 單元素元組 155
6.18.5 字典的關鍵字 155
6.19 相關模塊 156
6.20 拷貝Python對象、淺拷貝和深拷貝 156
6.21 序列類型小結 158
6.22 練習 160
第7章 映像和集合類型 163
7.1 映射類型:字典 164
7.1.1 如何創建字典和給字典賦值 164
7.1.2 如何訪問字典中的值 165
7.1.3 如何更新字典 166
7.1.4 如何刪除字典元素和字典 167
7.2 映射類型操作符 167
7.2.1 標準類型操作符 167
7.2.2 映射類型操作符 168
7.3 映射類型的內建函數和工廠函數 168
7.3.1 標準類型函數[type()、str()和cmp()] 168
7.3.2 映射類型相關的函數 170
7.4 映射類型內建方法 172
7.5 字典的鍵 174
7.5.1 不允許一個鍵對應多個值 174
7.5.2 鍵必須是可哈希的 175
7.6 集合類型 178
7.6.1 如何創建集合類型和給集合賦值 179
7.6.2 如何訪問集合中的值 179
7.6.3 如何更新集合 179
7.6.4 如何刪除集合中的成員和集合 180
7.7 集合類型操作符 180
7.7.1 標準類型操作符(所有的集合類型) 180
7.7.2 集合類型操作符(所有的集合類型) 181
7.7.3 集合類型操作符(僅適用于可變集合) 182
7.8 內建函數 183
7.8.1 標準類型函數 183
7.8.2 集合類型工廠函數 183
7.9 集合類型內建方法 184
7.9.1 方法(所有的集合方法) 184
7.9.2 方法(僅適用于可變集合) 184
7.9.3 操作符和內建方法比較 185
7.10 集合類型總結表 185
7.11 相關模塊 186
7.12 練習 186
第8章 條件和循環 189
8.1 if語句 190
8.1.1 多重條件表達式 190
8.1.2 單一語句的代碼塊 190
8.2 else語句 190
8.3 elif(即else-if)語句 191
8.4 條件表達式(即“三元操作符”) 192
8.5 while語句 193
8.5.1 一般語法 193
8.5.2 計數循環 193
8.5.3 無限循環 194
8.6 for語句 194
8.6.1 一般語法 194
8.6.2 用于序列類型 195
8.6.3 用于迭代器類型 196
8.6.4 range()內建函數 196
8.6.5 xrange() 內建函數 198
8.6.6 與序列相關的內建函數 198
8.7 break語句 199
8.8 continue語句 199
8.9 pass語句 200
8.10 再談else語句 200
8.11 迭代器和iter()函數 202
8.11.1 什么是迭代器 202
8.11.2 為什么要迭代器 202
8.11.3 如何迭代 202
8.11.4 使用迭代器 203
8.11.5 可變對象和迭代器 204
8.11.6 如何創建迭代器 204
8.12 列表解析 205
8.13 生成器表達式 206
8.14 相關模塊 209
8.15 練習 209
第9章 文件和輸入輸出 212
9.1 文件對象 213
9.2 文件內建函數(open()和file()) 213
9.2.1 工廠函數file() 214
9.2.2 通用換行符支持(UNS) 214
9.3 文件內建方法 215
9.3.1 輸入 215
9.3.2 輸出 215
9.3.3 文件內移動 216
9.3.4 文件迭代 216
9.3.5 其他 216
9.3.6 文件方法雜項 217
9.4 文件內建屬性 219
9.5 標準文件 220
9.6 命令行參數 220
9.7 文件系統 221
9.8 文件執行 227
9.9 長期存儲模塊 227
9.9.1 pickle和marshal模塊 227
9.9.2 DBM風格的模塊 228
9.9.3 shelve模塊 228
9.10 相關模塊 229
9.11 練習 230
第10章 錯誤和異常 234
10.1 什么是異常 235
10.1.1 錯誤 235
10.1.2 異常 235
10.2 Python 中的異常 236
10.3 檢測和處理異常 237
10.3.1 try-except語句 238
10.3.2 包裝內建函數 238
10.3.3 帶有多個except的try語句 240
10.3.4 處理多個異常的except語句 241
10.3.5 捕獲所有異常 242
10.3.6 “異常參數” 244
10.3.7 在應用使用我們封裝的函數 245
10.3.8 else子句 247
10.3.9 finally子句 248
10.3.10 try-finally語句 248
10.3.11 try-except-else-finally:廚房一鍋端 250
10.4 上下文管理 251
10.4.1 with語句 251
10.4.2 上下文管理協議 252
10.5 字符串作為異常 252
10.6 觸發異常 253
10.7 斷言 254
10.8 標準異常 255
10.9 創建異常 257
10.10 (現在)為什么用異常 262
10.11 到底為什么要異常 263
10.12 異常和sys模塊 263
10.13 相關模塊 264
10.14 練習 264
第11章 函數和函數式編程 266
11.1 什么是函數? 267
11.1.1 函數vs過程 267
11.1.2 返回值與函數類型 267
11.2 調用函數 268
11.2.1 函數操作符 268
11.2.2 關鍵字參數 269
11.2.3 默認參數 269
11.2.4 參數組 269
11.3 創建函數 272
11.3.1 def語句 272
11.3.2 聲明與定義比較 272
11.3.3 前向引用 272
11.3.4 函數屬性 273
11.3.5 內部/內嵌函數 274
11.3.6 函數(與方法)裝飾器 275
11.4 傳遞函數 278
11.5 Formal Arguments 279
11.5.1 位置參數 279
11.5.2 默認參數 279
11.6 可變長度的參數 282
11.6.1 非關鍵字可變長參數(元組) 282
11.6.2 關鍵字變量參數(字典) 283
11.6.3 調用帶有可變長參數對象函數 284
11.7 函數式編程 286
11.7.1 匿名函數與lambda 286
11.7.2 內建函數apply()、filter()、map()、reduce() 288
11.7.3 偏函數應用 293
11.8 變量作用域 295
11.8.1 全局變量與局部變量 295
11.8.2 globa語句 296
11.8.3 作用域的數字 297
11.8.4 閉包 298
11.8.5 作用域和lambda 302
11.8.6 變量作用域和名稱空間 304
11.9 遞歸 304
11.10 生成器 305
11.10.1 簡單的生成器特性 305
11.10.2 加強的生成器特性 307
11.11 練習 308
第12章 模塊 310
12.1 什么是模塊 311
12.2 模塊和文件 311
12.2.1 模塊名稱空間 311
12.2.2 搜索路徑和路徑搜索 311
12.3 名稱空間 312
12.3.1 名稱空間與變量作用域比較 313
12.3.2 名稱查找、確定作用域、覆蓋 314
12.3.3 無限制的名稱空間 314
12.4 導入模塊 315
12.4.1 import語句 315
12.4.2 from-import語句 315
12.4.3 多行導入 316
12.4.4 擴展的import語句(as) 316
12.5 模塊導入的特性 316
12.5.1 載入時執行模塊 316
12.5.2 導入(import)和加載(load) 317
12.5.3 導入到當前名稱空間的名稱 317
12.5.4 被導入到導入者作用域的名字 317
12.5.5 關于__future__ 318
12.5.6 警告框架 318
12.5.7 從ZIP文件中導入模塊 319
12.5.8 “新的”導入鉤子 319
12.6 模塊內建函數 319
12.6.1 __import__() 319
12.6.2 globals()和locals() 320
12.6.3 reload() 320
12.7 包 321
12.7.1 目錄結構 321
12.7.2 使用from-import導入包 322
12.8 模塊的其他特性 323
12.8.1 自動載入的模塊 323
12.8.2 阻止屬性導入 323
12.8.3 不區分大小的導入 323
12.8.4 源代碼編碼 324
12.8.5 導入循環 324
12.8.6 模塊執行 325
12.9 相關模塊 325
12.10 練習 326
第13章 面向對象編程 327
13.1 引言 328
13.2 面向對象編程 333
13.2.1 面向對象設計與面向對象編程的關系 333
13.2.2 現實中的問題 334
13.2.3 常用術語 334
13.3 類 335
13.3.1 創建類 336
13.3.2 聲明與定義 336
13.4 類屬性 336
13.4.1 類的數據屬性 337
13.4.2 Methods 337
13.4.3 決定類的
第1部分 Python核心
第1章 歡迎來到Python世界
開篇將介紹一些Python的背景知識,包括什么是Python、Python的起源和它的一些關鍵特性。一旦你來了興致,我們就會向你介紹怎樣獲得Python,以及如何在你的系統上安裝并運行它。本章的練習將會幫助你非常自如地使用Python,包括使用交互式解釋器,以及創建并運行腳本程序。
1.1 什么是Python
Python是一門優雅而健壯的編程語言,它繼承了傳統編譯語言的強大性和通用性,同時也借鑒了簡單腳本和解釋語言的易用性。它可以幫你完成工作,而且一段時問以后,你還能看明白自己寫的這段代碼。你會對自己如此快地學會它和它強大的功能感到十分的驚訝,更不用提你已經完成的工作了!只有你想不到,沒有Python做不到。
1.2 起源
Guido van Rossum于1989年底始創了Python,那時,他還在荷蘭的CWI(Centrum voor Wiskunde en Informatica,國家數學和計算機科學研究院)。1991年初,Python了及時個公開發行版。這一切究竟是如何開始的呢?像C、C 、Lisp、.Java和Perl一樣,Python來自于某個研究項目,項目中的那些程序員利用手邊現有的工具辛苦地工作著,他們設想并開發出了更好的解決辦法。
那時van Rossum是一位研究人員,對解釋型語言ABC有著豐富的設計‘經驗,這個語言同樣也是在CWI開發的。但是他不滿足其有限的開發能力。已經使用并參與開發了像ABC這樣的高級語言后,再退回到C語言顯然是不可能的。他所期望的工具有一些是用于完成日常系統管理任務的,而且它還希望能夠訪問Amoeba分布式操作系統的系統調用。盡管vanRossum也曾想過為Amoeba開發專用語言,但足創造一種通用的程序設計語言顯然更加明智,于是在1989年末,Python的種子被播下了。
1.3 特點
盡管Python已經流行了超過15年,但是一些人仍舊認為相對于通用軟件開發產業而言,它還是個新丁。我們應當謹慎地使用“相對”這個詞,因為“網絡時代”的程序開發,幾年看上去就像幾十年。
當人們詢問:“什么是Python?”的時候,很難用任何一個具象來描述它。人們更傾向于一口氣不加思索地說出他們對Python的所有感覺,Python是一(請填寫),這些特點究竟又是什么呢?為了讓你能知其所以然,我們下面會對這些特點進行逐一地闡釋。
1.3.1 高級
伴隨著每一代編程語言的產生,我們會達到一個新的高度。匯編語言是獻給那些掙扎在機器代碼中的人的禮物,后來有了FORTRAN、c和Pascal語言,它們將計算提升到了嶄新的高度,并且開創了軟件開發行業。伴隨著C語言誕生了更多的像c斗_卜、Java這樣的現代編譯語言。我們沒有止步于此,于是有了強大的、可以進行系統調用的解釋型腳本語言,例如Tcl、Perl和Python。
這些語言都有高級的數據結構,這樣就減少了以前“框架”開發需要的時間。像Python中的列表(大小可變的數組)和字典(哈希表)就是內建于語言本身的。在核心語言中提供這些重要的構建單元,可以鼓勵人們使用它們,縮短開發時間與代碼量,產生出可讀性更好的代碼。
在C語言中,對于混雜數組(Python中的列表)和哈希表(Python中的字典)還沒有相應的標準庫,所以它們經常被重復實現,并被復制到每個新項目中去。這個過程混亂而且容易產生錯誤。
……