這是一本Python快速入門書,基于Python 3.6編寫。本書分為4部分,*部分講解Python的基礎(chǔ)知識,對Python進行概要的介紹;第二部分介紹Python編程的重點,涉及列表、元組、集合、字符串、字典、流程控制、函數(shù)、模塊和作用域、文件系統(tǒng)、異常等內(nèi)容;第三部分闡釋Python的特性,涉及類和面向?qū)ο、正則表達式、數(shù)據(jù)類型即對象、包、Python庫等內(nèi)容;第四部分關(guān)注數(shù)據(jù)處理,涉及數(shù)據(jù)文件的處理、網(wǎng)絡(luò)數(shù)據(jù)、數(shù)據(jù)的保存和數(shù)據(jù)探索,*后給出了相關(guān)的案例。 本書框架結(jié)構(gòu)清晰,內(nèi)容編排合理,講解循序漸進,并結(jié)合大量示例和習(xí)題,讓讀者可以快速學(xué)習(xí)和掌握Python,既適合Python初學(xué)者學(xué)習(xí),也適合作為專業(yè)程序員的簡明Python參考書。
Python如今已經(jīng)發(fā)展成為一種令人驚嘆的計算機語言,它已強大到足以應(yīng)對從底層系統(tǒng)資源到應(yīng)用程序(如深度學(xué)習(xí))的方方面面。它既簡潔、優(yōu)雅又功能完備,還擁有龐大的由庫和框架構(gòu)成的生態(tài)系統(tǒng)。Python程序員的需求量很大,不熟練掌握Python顯然不行! 本書是Python專業(yè)人士Naomi Ceder編寫的Python語言的綜合指南。她是一位經(jīng)驗豐富的教學(xué)者,她既能讓讀者關(guān)注語言的細節(jié),又能使其具備解決實際問題的能力。本書中配有大量貼切的示例和邊做邊學(xué)的習(xí)題,有助于讀者掌握每一個重要概念。無論讀者是要抓取網(wǎng)站內(nèi)容還是想玩轉(zhuǎn)嵌套元組,都會贊嘆本書的清晰、專注和對細節(jié)的重視。 本書主要內(nèi)容 ● 明確涵蓋Python 3。 ● 全面介紹核心庫、包和工具。 ● 配備精深的習(xí)題。 ● 新增5章與數(shù)據(jù)科學(xué)相關(guān)的內(nèi)容。 本書專為熟悉編程概念的讀者編寫,但不要求讀者具備Python的使用經(jīng)驗。
娜奧米·塞德(Naomi Ceder)是Python軟件基金會zhu席。自2001年以來,她一直在學(xué)習(xí)、使用和教授Python。 她的編程生涯已經(jīng)持續(xù)了近30年,使用過多種編程語言,做過Linux系統(tǒng)管理員、編程教師、開發(fā)人員和系統(tǒng)架構(gòu)師。她從2001年開始使用Python,從此向各個層次的用戶講授Python,從12歲的孩子到專業(yè)編程人員都有。她向所有人宣傳Python,宣講加入內(nèi)容豐富的社區(qū)的好處。她現(xiàn)在領(lǐng)導(dǎo)著Dick Blick Art Materials的一支開發(fā)團隊。
第 一部分 開始篇
第 1章 關(guān)于Python 3
1.1 用Python的理由 3
1.2 Python的長處 3
1.2.1 Python易于使用 4
1.2.2 Python富有表現(xiàn)力 4
1.2.3 Python可讀性好 5
1.2.4 Python功能齊備 5
1.2.5 Python跨平臺 6
1.2.6 Python免費 6
1.3 Python的短板 6
1.3.1 Python不是速度最快的語言 7
1.3.2 Python的庫不算最多 7
1.3.3 Python在編譯時不檢查變量類型 7
1.3.4 Python對移動應(yīng)用的支持不足 8
1.3.5 Python對多處理器的利用不充分 8
1.4 學(xué)Python 3的理由 8
1.5 小結(jié) 9
第 2章 入門 10
2.1 Python的安裝 10
2.2 基礎(chǔ)交互模式和IDLE 12
2.2.1 基礎(chǔ)交互模式 12
2.2.2 IDLE集成開發(fā)環(huán)境 13
2.2.3 基礎(chǔ)交互模式和IDLE的適用場景 13
2.3 使用IDLE的Python shell窗口 13
2.4 第 一個程序Hello, world" 14
2.5 利用交互式提示符探索Python 15
2.6 小結(jié) 16
第3章 Python概述 17
3.1 Python簡介 17
3.2 內(nèi)置數(shù)據(jù)類型 18
3.2.1 數(shù)值 18
3.2.2 列表 20
3.2.3 元組 21
3.2.4 字符串 22
3.2.5 字典 23
3.2.6 集合 23
3.2.7 文件對象 23
3.3 流程控制語句結(jié)構(gòu) 24
3.3.1 布爾值和表達式 24
3.3.2 if-elif-else語句 25
3.3.3 while循環(huán) 25
3.3.4 for循環(huán) 25
3.3.5 函數(shù)定義 26
3.3.6 異!27
3.3.7 用關(guān)鍵字with控制上下文 27
3.4 創(chuàng)建模塊 28
3.5 面向?qū)ο缶幊獭?9
3.6 小結(jié) 31
第二部分 重點內(nèi)容
第4章 基礎(chǔ)知識 35
4.1 縮進和代碼塊構(gòu)建 35
4.2 識別注釋 36
4.3 變量和賦值 37
4.4 表達式 38
4.5 字符串 39
4.6 數(shù)值 40
4.6.1 內(nèi)置數(shù)值處理函數(shù) 41
4.6.2 高級數(shù)值處理函數(shù) 41
4.6.3 數(shù)值計算 41
4.6.4 復(fù)數(shù) 41
4.6.5 高級復(fù)數(shù)函數(shù) 42
4.7 None值 43
4.8 獲取用戶輸入 43
4.9 內(nèi)置操作符 44
4.10 基本的Python編碼風(fēng)格 44
4.11 小結(jié) 45
第5章 列表、元組和集合 46
5.1 列表類似于數(shù)組 46
5.2 列表的索引機制 47
5.3 修改列表 49
5.4 對列表排序 51
5.4.1 自定義排序 52
5.4.2 sorted()函數(shù) 53
5.5 其他常用的列表操作 53
5.5.1 用in操作符判斷列表成員 53
5.5.2 用 操作符拼接列表 54
5.5.3 用*操作符初始化列表 54
5.5.4 用min和max方法求列表的最小值和最大值 54
5.5.5 用index方法搜索列表 54
5.5.6 用count方法對匹配項計數(shù) 55
5.5.7 列表操作小結(jié) 55
5.6 嵌套列表和深復(fù)制 56
5.7 元組 58
5.7.1 元組的基礎(chǔ)知識 59
5.7.2 單個元素的元組應(yīng)加上逗號 60
5.7.3 元組的打包和拆包 60
5.7.4 列表和元組的相互轉(zhuǎn)換 61
5.8 集合 62
5.8.1 集合的操作 62
5.8.2 不可變集合 63
5.9 小結(jié) 64
第6章 字符串 65
6.1 將字符串理解為字符序列 65
6.2 基本的字符串操作 66
6.3 特殊字符和轉(zhuǎn)義序列 66
6.3.1 基本的轉(zhuǎn)義序列 66
6.3.2 數(shù)字格式(八進制、十六進制)和Unicode編碼的轉(zhuǎn)義序列 67
6.3.3 對帶特殊字符的字符串打印和求值的差異 68
6.4 字符串方法 68
6.4.1 字符串的split和join方法 69
6.4.2 將字符串轉(zhuǎn)換為數(shù)值 70
6.4.3 去除多余的空白符 71
6.4.4 字符串搜索 72
6.4.5 字符串修改 74
6.4.6 利用列表修改字符串 75
6.4.7 其他有用的字符串方法和常量 75
6.5 將對象轉(zhuǎn)換為字符串 77
6.6 使用format方法 78
6.6.1 format方法和位置參數(shù) 78
6.6.2 format方法和命名參數(shù) 78
6.6.3 格式描述符 79
6.7 用%格式化字符串 79
6.7.1 使用格式化序列 80
6.7.2 命名參數(shù)和格式化序列 81
6.8 字符串內(nèi)插 82
6.9 bytes對象 82
6.10 小結(jié) 84
第7章 字典 85
7.1 何為字典 85
7.2 字典的其他操作 87
7.3 單詞計數(shù) 90
7.4 可用作字典鍵的對象 90
7.5 稀疏矩陣 91
7.6 將字典用作緩存 92
7.7 字典的效率 93
7.8 小結(jié) 93
第8章 流程控制 94
8.1 while循環(huán) 94
8.2 if-elif-else語句 95
8.3 for循環(huán) 96
8.3.1 range函數(shù) 97
8.3.2 用初值和步進值控制range函數(shù) 97
8.3.3 在for循環(huán)中使用break和
continue語句 98
8.3.4 for循環(huán)和元組拆包 98
8.3.5 enumerate函數(shù) 98
8.3.6 zip函數(shù) 99
8.4 列表和字典推導(dǎo)式 99
8.5 語句、代碼塊和縮進 101
8.6 布爾值和布爾表達式 103
8.6.1 大多數(shù)Python對象都能用作布爾類型 104
8.6.2 比較操作符和布爾操作符 104
8.7 編寫簡單的文本文件分析程序 105
8.8 小結(jié) 106
第9章 函數(shù) 107
9.1 基本的函數(shù)定義 107
9.2 多種函數(shù)參數(shù) 108
9.2.1 按位置給出形參 108
9.2.2 按形參名稱傳遞實參 109
9.2.3 變長實參 110
9.2.4 多種參數(shù)傳遞方式的混用 111
9.3 將可變對象用作函數(shù)實參 111
9.4 局部變量、非局部變量和全局變量 113
9.5 將函數(shù)賦給變量 115
9.6 lambda表達式 115
9.7 生成器函數(shù) 116
9.8 裝飾器 117
9.9 小結(jié) 118
第 10章 模塊和作用域規(guī)則 120
10.1 何為模塊 120
10.2 編寫第 一個模塊 121
10.3 import語句 123
10.4 模塊搜索路徑 124
10.5 模塊內(nèi)部私有名稱 126
10.6 庫和第三方模塊 127
10.7 Python作用域規(guī)則和命名空間 127
10.8 小結(jié) 133
第 11章 Python程序 134
11.1 創(chuàng)建一個很簡單的程序 134
11.1.1 從命令行啟動腳本 135
11.1.2 命令行參數(shù) 135
11.1.3 腳本輸入/輸出的重定
向 136
11.1.4 argparse模塊 137
11.1.5 fileinput模塊的使用 138
11.2 讓腳本在UNIX下直接運行 140
11.3 macOS系統(tǒng)中的腳本 140
11.4 Windows中多種腳本執(zhí)行方式 140
11.4.1 從命令窗口或PowerShell中啟動腳本 141
11.4.2 Windows中的其他運行方式 141
11.5 程序和模塊 141
11.6 發(fā)布Python應(yīng)用程序 146
11.6.1 wheel包 146
11.6.2 zipapp和pex 146
11.6.3 py2exe和py2app 147
11.6.4 用freeze創(chuàng)建可執(zhí)行程序 147
11.7 小結(jié) 147
第 12章 文件系統(tǒng)的使用 149
12.1 os、os.path和pathlib的對比 149
12.2 路徑和路徑名 150
12.2.1 絕對路徑和相對路徑 150
12.2.2 當(dāng)前工作目錄 151
12.2.3 用pathlib模塊訪問目錄 152
12.2.4 路徑名的處理 152
12.2.5 用pathlib處理路徑名 154
12.2.6 常用變量和函數(shù) 155
12.3 獲取文件信息 156
12.4 文件系統(tǒng)的其他操作 158
12.5 處理目錄樹下的所有文件 161
12.6 小結(jié) 162
第 13章 文件的讀寫 165
13.1 打開文件及file對象 165
13.2 關(guān)閉文件 166
13.3 以寫入等模式打開文件 166
13.4 讀寫文本及二進制數(shù)據(jù)的函數(shù) 167
13.5 用pathlib讀寫文件 169
13.6 屏幕輸入/輸出及重定向 169
13.7 用struct模塊讀取結(jié)構(gòu)化的二進制數(shù)據(jù) 172
13.8 用pickle將對象存入文件 173
13.9 用shelve保存對象 176
13.10 小結(jié) 178
第 14章 異常 179
14.1 異常簡介 179
14.1.1 錯誤和異常處理的一般原則 179
14.1.2 異常較為正式的定義 182
14.1.3 多種異常的處理 182
14.2 Python中的異!182
14.2.1 Python異常的類型 183
14.2.2 引發(fā)異!185
14.2.3 捕獲并處理異常 185
14.2.4 自定義新的異!187
14.2.5 用assert語句調(diào)試程序 188
14.2.6 異常的繼承架構(gòu) 188
14.2.7 示例:用Python編寫的磁盤寫入程序 189
14.2.8 示例:正常計算過程中的異!189
14.2.9 異常的適用場合 190
14.3 用到with關(guān)鍵字的上下文管理器 191
14.4 小結(jié) 192
第三部分 高級特性
第 15章 類和面向?qū)ο缶幊獭?95
15.1 定義類 195
15.2 實例變量 196
15.3 方法 197
15.4 類變量 199
15.5 靜態(tài)方法和類方法 201
15.5.1 靜態(tài)方法 201
15.5.2 類方法 202
15.6 繼承 203
15.7 類及實例變量的繼承 205
15.8 概括:Python類的基礎(chǔ)知識 206
15.9 私有變量和私有方法 208
15.10 用@property獲得更為靈活的實例變量 209
15.11 類實例的作用域規(guī)則和命名空間 210
15.12 析構(gòu)函數(shù)和內(nèi)存管理 214
15.13 多重繼承 214
15.14 小結(jié) 216
第 16章 正則表達式 218
16.1 何為正則表達式 218
16.2 帶特殊字符的正則表達式 219
16.3 正則表達式和原始字符串 220
16.4 從字符串提取出匹配文本 221
16.5 用正則表達式替換文本 224
16.6 小結(jié) 226
第 17章 數(shù)據(jù)類型即對象 227
17.1 類型即對象 227
17.2 類型的使用 228
17.3 類型和用戶自定義類 228
17.4 鴨子類型 230
17.5 何為特殊方法屬性 231
17.6 讓對象像列表一樣工作 232
17.7 特殊方法屬性__getitem__ 232
17.7.1 工作原理 233
17.7.2 實現(xiàn)完整的列表功能 234
17.8 完整實現(xiàn)列表功能的對象 235
17.9 由內(nèi)置類型派生子類 237
17.9.1 由列表類型派生子類 237
17.9.2 由UserList派生子類 238
17.10 特殊方法屬性的適用場景 239
17.11 小結(jié) 239
第 18章 包 240
18.1 何為包 240
18.2 包的第 一個示例 240
18.3 包的實際例子 242
18.3.1 包內(nèi)的__init__.py文件 243
18.3.2 mathproj包的基本用法 243
18.3.3 子包和子模塊的加載 244
18.3.4 包內(nèi)的import語句 245
18.4 __all__屬性 246
18.5 包的合理使用 246
18.6 小結(jié) 247
第 19章 Python庫的使用 248
19.1 "功能齊備"的標(biāo)準
庫 248
19.1.1 各種數(shù)據(jù)類型的
管理 248
19.1.2 文件和存儲操作 250
19.1.3 操作系統(tǒng)服務(wù)的訪問 251
19.1.4 互聯(lián)網(wǎng)協(xié)議及其數(shù)據(jù)格式的使用 251
19.1.5 開發(fā)調(diào)試工具及運行時服務(wù) 252
19.2 標(biāo)準庫之外的庫 253
19.3 添加其他Python庫 253
19.4 通過pip和venv安裝Python庫 253
19.4.1 帶--user標(biāo)志的安裝 254
19.4.2 虛擬環(huán)境 254
19.5 PyPI(即奶酪商店) 255
19.6 小結(jié) 255
第四部分 數(shù)據(jù)處理
第 20章 簡單的文件問題 259
20.1 問題:沒完沒了的數(shù)據(jù)文件流 259
20.2 場景:無窮無盡的產(chǎn)品源數(shù)據(jù) 259
20.3 引入更多目錄結(jié)構(gòu) 261
20.4 節(jié)省存儲空間:壓縮和整理 263
20.4.1 文件壓縮 263
20.4.2 文件清理 264
20.5 小結(jié) 265
第 21章 數(shù)據(jù)文件的處理 266
21.1 ETL簡介 266
21.2 文本文件的讀取 267
21.2.1 文本編碼:ASCII、
Unicode等 267
21.2.2 非結(jié)構(gòu)化文本 268
21.2.3 帶分隔符的普通文本文件 270
21.2.4 csv模塊 271
21.2.5 讀取csv文件并存為字典的列表 274
21.3 Excel文件 275
21.4 數(shù)據(jù)清洗 276
21.4.1 清洗 276
21.4.2 排序 277
21.4.3 數(shù)據(jù)清洗時的問題和陷阱 278
21.5 數(shù)據(jù)文件的寫入 279
21.5.1 CSV和其他帶分隔符的文件 279
21.5.2 Excel文件的寫入 280
21.5.3 數(shù)據(jù)文件打包 280
21.6 小結(jié) 281
第 22章 網(wǎng)絡(luò)數(shù)據(jù) 282
22.1 獲取文件 282
22.1.1 用Python從FTP服務(wù)器獲取文件 283
22.1.2 通過SFTP協(xié)議獲取文件 284
22.1.3 通過HTTP/HTTPS協(xié)議獲取文件 284
22.2 通過API獲取數(shù)據(jù) 285
22.3 結(jié)構(gòu)化數(shù)據(jù)格式 287
22.3.1 JSON數(shù)據(jù) 287
22.3.2 XML數(shù)據(jù) 291
22.4 抓取Web數(shù)據(jù) 295
22.5 小結(jié) 299
第 23章 數(shù)據(jù)的保存 300
23.1 關(guān)系數(shù)據(jù)庫 300
23.2 SQLite:sqlite3數(shù)據(jù)庫的用法 301
23.3 MySQL、PostgreSQL和其他關(guān)系數(shù)據(jù)庫的使用 303
23.4 利用ORM簡化數(shù)據(jù)庫操作 303
23.4.1 SQLAlchemy 304
23.4.2 用Alembic修改數(shù)據(jù)庫結(jié)構(gòu) 307
23.5 NoSQL數(shù)據(jù)庫 310
23.6 用Redis實現(xiàn)鍵/值存儲 310
23.7 MongoDB中的文檔 313
23.8 小結(jié) 315
第 24章 數(shù)據(jù)探索 316
24.1 Python的數(shù)據(jù)探索工具 316
24.1.1 Python用于數(shù)據(jù)探索的優(yōu)勢 316
24.1.2 Python能比電子表格做得更好 317
24.2 Jupyter記事本 317
24.2.1 啟動內(nèi)核 318
24.2.2 執(zhí)行單元格中的代碼 318
24.3 Python和pandas 319
24.3.1 為什么要選用
pandas 319
24.3.2 pandas的安裝 320
24.3.3 Data Frame 320
24.4 數(shù)據(jù)清洗 322
24.4.1 用pandas加載并保存數(shù)據(jù) 322
24.4.2 用Data Frame進行數(shù)據(jù)清洗 324
24.5 數(shù)據(jù)聚合和處理 326
24.5.1 Data Frame的合并 326
24.5.2 數(shù)據(jù)選取 327
24.5.3 分組與聚合 328
24.6 數(shù)據(jù)繪圖 329
24.7 不用pandas的理由 330
24.8 小結(jié) 331
第 25章 案例研究 332
25.1 數(shù)據(jù)的下載 332
25.2 解析inventory數(shù)據(jù) 335
25.3 根據(jù)經(jīng)緯度選擇一個觀測站 336
25.4 選擇觀測站并獲取其元數(shù)據(jù) 338
25.5 獲取并解析真實的天氣數(shù)據(jù) 341
25.5.1 獲取數(shù)據(jù) 341
25.5.2 解析天氣數(shù)據(jù) 341
25.6 將天氣數(shù)據(jù)存入數(shù)據(jù)庫(可選) 344
25.7 選取數(shù)據(jù)并作圖 345
25.8 用pandas對數(shù)據(jù)繪圖 346
附錄A Python文檔使用指南 347
習(xí)題答案(異步社區(qū)下載)