前言 xiv
第1章 Python初探 1
1.1 真實世界中的Python 5
1.2 Python與其他語言 5
1.3 為什麼選擇Python 7
1.4 何時不應該使用Python 8
1.5 Python 2與Python 3 8
1.6 安裝Python 9
1.7 運行Python 9
1.7.1 使用交互式解釋器 9
1.7.2 使用Python文件 10
1.7.3 下一步 11
1.8 禪定一刻 11
1.9 練習 11
第2章 Python基本元素:數字、字符串和變量 13
2.1 變量、名字和對象 13
2.2 數字 16
2.2.1 整數 17
2.2.2 優先級 20
2.2.3 基數 21
2.2.4 類型轉換 22
2.2.5 一個int型有多大 23
2.2.6 浮點數 24
2.2.7 數學函數 24
2.3 字符串 24
2.3.1 使用引號創建 25
2.3.2 使用str()進行類型轉換 27
2.3.3 使用 轉義 27
2.3.4 使用+ 拼接 28
2.3.5 使用* 復製 28
2.3.6 使用[] 提取字符 28
2.3.7 使用[start:end:step]分片 29
2.3.8 使用len()獲得長度 31
2.3.9 使用split()分割 32
2.3.10 使用join()閤並 32
2.3.11 熟悉字符串 32
2.3.12 大小寫與對齊方式 33
2.3.13 使用replace()替換 34
2.3.14 更多關於字符串的內容 35
2.4 練習 35
第3章 Python容器:列錶、元組、字典與集閤 36
3.1 列錶和元組 36
3.2 列錶 37
3.2.1 使用[] 或list()創建列錶 37
3.2.2 使用list()將其他數據類型轉換成列錶 37
3.2.3 使用[offset]獲取元素 38
3.2.4 包含列錶的列錶 39
3.2.5 使用[offset]修改元素 39
3.2.6 指定範圍並使用切片提取元素 40
3.2.7 使用append()添加元素至尾部 40
3.2.8 使用extend()或+=閤並列錶 40
3.2.9 使用insert()在指定位置插入元素 41
3.2.10 使用del刪除指定位置的元素 41
3.2.11 使用remove()刪除具有指定值的元素 42
3.2.12 使用pop()獲取並刪除指定位置的元素 42
3.2.13 使用index()查詢具有特定值的元素位置 42
3.2.14 使用in判斷值是否存在 42
3.2.15 使用count()記錄特定值齣現的次數 43
3.2.16 使用join()轉換為字符串 43
3.2.17 使用sort()重新排列元素 44
3.2.18 使用len()獲取長度 44
3.2.19 使用= 賦值,使用copy()復製 45
3.3 元組 46
3.3.1 使用()創建元組 46
3.3.2 元組與列錶 47
3.4 字典 47
3.4.1 使用{}創建字典 48
3.4.2 使用dict()轉換為字典 48
3.4.3 使用[key]添加或修改元素 49
3.4.4 使用update()閤並字典 50
3.4.5 使用del刪除具有指定鍵的元素 51
3.4.6 使用clear()刪除所有元素 51
3.4.7 使用in 判斷是否存在 51
3.4.8 使用[key]獲取元素 52
3.4.9 使用keys()獲取所有鍵 52
3.4.10 使用values()獲取所有值 53
3.4.11 使用items()獲取所有鍵值對 53
3.4.12 使用= 賦值,使用copy()復製 53
3.5 集閤 53
3.5.1 使用set()創建集閤 54
3.5.2 使用set()將其他類型轉換為集閤 54
3.5.3 使用in測試值是否存在 55
3.5.4 閤並及運算符 56
3.6 比較幾種數據結構 58
3.7 建立大型數據結構 59
3.8 練習 60
第4章 Python外殼:代碼結構 61
4.1 使用# 注釋 61
4.2 使用 連接 62
4.3 使用if、elif 和else進行比較 63
4.4 使用while進行循環 66
4.4.1 使用break跳齣循環 66
4.4.2 使用continue跳到循環開始 67
4.4.3 循環外使用else 67
4.5 使用for迭代 68
4.5.1 使用break跳齣循環 69
4.5.2 使用continue跳到循環開始 69
4.5.3 循環外使用else 69
4.5.4 使用zip()並行迭代 70
4.5.5 使用range()生成自然數序列 71
4.5.6 其他迭代方式 71
4.6 推導式 72
4.6.1 列錶推導式 72
4.6.2 字典推導式 74
4.6.3 集閤推導式 74
4.6.4 生成器推導式 74
4.7 函數 75
4.7.1 位置參數 79
4.7.2 關鍵字參數 79
4.7.3 指定默認參數值 79
4.7.4 使用*收集位置參數 80
4.7.5 使用**收集關鍵字參數 81
4.7.6 文檔字符串 82
4.7.7 一等公民:函數 82
4.7.8 內部函數 84
4.7.9 閉包 84
4.7.10 匿名函數:lambda()函數 85
4.8 生成器 86
4.9 裝飾器 87
4.10 命名空間和作用域 89
4.11 使用try和except處理錯誤 91
4.12 編寫自己的異常 93
4.13 練習 94
第5章 Python盒子:模塊、包和程序 95
5.1 獨立的程序 95
5.2 命令行參數 96
5.3 模塊和import語句 96
5.3.1 導入模塊 96
5.3.2 使用彆名導入模塊 98
5.3.3 導入模塊的一部分 98
5.3.4 模塊搜索路徑 98
5.4 包 99
5.5 Python 標準庫 99
5.5.1 使用setdefault()和defaultdict()處理缺失的鍵 100
5.5.2 使用Counter()計數 101
5.5.3 使用有序字典OrderedDict()按鍵排序 103
5.5.4 雙端隊列:棧+隊列 103
5.5.5 使用itertools迭代代碼結構 104
5.5.6 使用pprint()友好輸齣 105
5.6 獲取更多Python代碼 105
5.7 練習 106
第6章 對象和類 107
6.1 什麼是對象 107
6.2 使用class定義類 108
6.3 繼承 109
6.4 覆蓋方法 111
6.5 添加新方法 112
6.6 使用super從父類得到幫助 112
6.7 self的自辯 113
6.8 使用屬性對特性進行訪問和設置 114
6.9 使用名稱重整保護私有特性 117
6.10 方法的類型 118
6.11 鴨子類型 119
6.12 特殊方法 120
6.13 組閤 123
6.14 何時使用類和對象而不是模塊 124
6.15 練習 126
第7章 像高手一樣玩轉數據 127
7.1 文本字符串 127
7.1.1 Unicode 127
7.1.2 格式化 134
7.1.3 使用正則錶達式匹配 137
7.2 二進製數據 144
7.2.1 字節和字節數組 144
7.2.2 使用struct轉換二進製數據 145
7.2.3 其他二進製數據工具 148
7.2.4 使用binascii()轉換字節/ 字符串 149
7.2.5 位運算符 149
7.3 練習 149
第8章 數據的歸宿 152
8.1 文件輸入/輸齣 152
8.1.1 使用write()寫文本文件 153
8.1.2 使用read()、readline()或者readlines()讀文本文件 154
8.1.3 使用write()寫二進製文件 156
8.1.4 使用read()讀二進製文件 157
8.1.5 使用with自動關閉文件 157
8.1.6 使用seek()改變位置 157
8.2 結構化的文本文件 159
8.2.1 CSV 159
8.2.2 XML 161
8.2.3 HTML 163
8.2.4 JSON 163
8.2.5 YAML 165
8.2.6 安全提示 166
8.2.7 配置文件 167
8.2.8 其他交換格式 168
8.2.9 使用pickle序列化 168
8.3 結構化二進製文件 169
8.3.1 電子數據錶 169
8.3.2 層次數據格式 169
8.4 關係型數據庫 170
8.4.1 SQL 170
8.4.2 DB-API 172
8.4.3 SQLite 172
8.4.4 MySQL 174
8.4.5 PostgreSQL 174
8.4.6 SQLAlchemy 174
8.5 NoSQL數據存儲 179
8.5.1 dbm family 180
8.5.2 memcached 180
8.5.3 Redis 181
8.5.4 其他的NoSQL 189
8.6 全文數據庫 189
8.7 練習 190
第9章 剖析Web 191
9.1 Web 客戶端 192
9.1.1 使用telnet進行測試 193
9.1.2 Python的標準Web庫 194
9.1.3 拋開標準庫:requests 195
9.2 Web 服務端 196
9.2.1 最簡單的Python Web服務器 196
9.2.2 Web服務器網關接口 198
9.2.3 框架 198
9.2.4 Bottle 198
9.2.5 Flask 201
9.2.6 非Python的Web服務器 204
9.2.7 其他框架 206
9.3 Web服務和自動化 207
9.3.1 webbrowser模塊 207
9.3.2 Web API和錶述性狀態傳遞 208
9.3.3 JSON 209
9.3.4 抓取數據 209
9.3.5 用BeautifulSoup來抓取HTML 209
9.4 練習 210
第10章 係統 212
10.1 文件 212
10.1.1 用open()創建文件 212
10.1.2 用exists()檢查文件是否存在 213
10.1.3 用isfile()檢查是否為文件 213
10.1.4 用copy()復製文件 213
10.1.5 用rename()重命名文件 214
10.1.6 用link()或者symlink()創建鏈接 214
10.1.7 用chmod()修改權限 214
10.1.8 用chown()修改所有者 214
10.1.9 用abspath()獲取路徑名 215
10.1.10 用realpath()獲取符號的路徑名 215
10.1.11 用remove()刪除文件 215
10.2 目錄 215
10.2.1 使用mkdir()創建目錄 215
10.2.2 使用rmdir()刪除目錄 215
10.2.3 使用listdir()列齣目錄內容 216
10.2.4 使用chdir()修改當前目錄 216
10.2.5 使用glob()列齣匹配文件 216
10.3 程序和進程 217
10.3.1 使用subprocess創建進程 218
10.3.2 使用multiprocessing創建進程 219
10.3.3 使用terminate()終止進程 219
10.4 日期和時間 220
10.4.1 datetime模塊 221
10.4.2 使用time模塊 223
10.4.3 讀寫日期和時間 225
10.4.4 其他模塊 227
10.5 練習 228
第11章 並發和網絡 229
11.1 並發 230
11.1.1 隊列 231
11.1.2 進程 231
11.1.3 綫程 232
11.1.4 綠色綫程和gevent 234
11.1.5 twisted 236
11.1.6 asyncio 238
11.1.7 Redis 238
11.1.8 隊列之上 241
11.2 網絡 241
11.2.1 模式 242
11.2.2 發布-訂閱模型 242
11.2.3 TCP/IP 245
11.2.4 套接字 246
11.2.5 ZeroMQ 250
11.2.6 scapy 253
11.2.7 網絡服務 253
11.2.8 Web服務和API 255
11.2.9 遠程處理 256
11.2.10 大數據和MapReduce 260
11.2.11 在雲上工作 261
11.3 練習 264
第12章 成為真正的Python開發者 265
12.1 關於編程 265
12.2 尋找Python代碼 265
12.3 安裝包 266
12.3.1 使用pip 266
12.3.2 使用包管理工具 267
12.3.3 從源代碼安裝 267
12.4 集成開發環境 268
12.4.1 IDLE 268
12.4.2 PyCharm 268
12.4.3 IPython 269
12.5 命名和文檔 269
12.6 測試代碼 270
12.6.1 使用pylint、pyflakes和pep8檢查代碼 270
12.6.2 使用unittest進行測試 272
12.6.3 使用doctest進行測試 276
12.6.4 使用nose進行測試 277
12.6.5 其他測試框架 278
12.6.6 持續集成 278
12.7 調試Python代碼 278
12.8 使用pdb進行調試 279
12.9 記錄錯誤日誌 284
12.10 優化代碼 286
12.10.1 測量時間 286
12.10.2 算法和數據結構 288
12.10.3 Cython、NumPy和C擴展 289
12.10.4 PyPy 289
12.11 源碼控製 289
12.11.1 Mercurial 290
12.11.2 Git 290
12.12 復製本書代碼 292
12.13 更多內容 293
12.13.1 書 293
12.13.2 網站 293
12.13.3 社區 293
12.13.4 大會 294
12.14 後續內容 294
附錄A Python的藝術 295
附錄B 工作中的Python 307
附錄C Python的科學 320
附錄D 安裝Python 3 339
附錄E 習題解答 349
附錄F 速查錶 380
作者介紹 383
封麵介紹 383
· · · · · · (
收起)