內容簡介
本書由資立樂白榜深人工智慧工程師專門針對Python新手鴉乘量身定做,涵蓋Python 3.8 實際開發的重要知識點,內容包括:Python語言的數據類型、運算符、數據結構、字元串、控制流、函式、序列、多執行緒、
正則表達式、面向對象編程、檔案操作、網路編程、郵妹微局件收發、資料庫操作等,提供網路爬蟲、自然語言處理、區塊鏈項目和圖片處理項乃照乃目範例,各章還安排了調試、問題解答、溫故知新、牛刀小試等特色內容,以幫助讀者學會處理程式異常、解答學習困惑,鞏固知識,學以致用。 本書通俗易懂,示例豐富,代碼可讀性及可操作性強,非常適合Python初學者、想學習和了解Python 3.8的程式設計師使用,也可作為Python網課、培訓及大專院校的教學用書。
作品目錄
第1章 走進Python 3.8的精彩世界 1
1.1 Python的起源 1
1.2 Python的套用場合 2
1.3 從2.7到3.8,Python的新特性 4
1.3.1 Python 2.x和Python 3.x的區別 4
1.3.2 Python 3.8的新特性 6
1.4 如何學習Python 6
1.5 Python開發環境構建 7
1.5.1 在Windows系統中安裝Python 7
1.5.2 在Linux、UNIX系統和Mac中
安裝Python 11
1.5.3 其他版本 12
1.6 從Hello World開始 12
1.7 調試 13
1.8 問題解答 14
1.9 溫故知新,學以致用 14
第2章 Python編程基礎 16
2.1 認識程式 16
2.1.1 程式 16
2.1.2 調試 17
2.1.3 語法錯誤——南虹達拜轅北轍 18
2.1.4 運行錯誤——突然的停止 18
2.1.5 語義錯誤——答非所問 18
2.2 數據類型 19
2.2.1 整型 19
2.2.2 浮點型 21
2.2.3 複數 22
2.2.4 數據類型轉換 22
2.2.5 常量 23
2.3 變數和關鍵字 24
2.3.1 變數 24
2.3.2 變數名稱 27
2.3.3 Python關鍵字 28
2.4 語籃催棵承句 29
2.5 表達式 30
2.6 運算符和操作對象 31
2.6.1 什麼是運算符和操作對象 31
2.6.2 算術運算符 32
2.6.3 比較運算符 33
2.6.4 賦值運算符 34
2.6.5 位運算符 35
2.6.6 邏輯運算符 36
2.6.7 成員運算符 37
2.6.8 身份運算符 37
2.6.9 運算符的優先權 38
2.7 字元串操作 40
2.8 注釋 43
2.9 牛刀小試——九九乘法表逆實現 44
2.10 調試 44
2.11 問題解答 45
2.12 溫故知新,學以致用 45
第3章 列表和元組 47
3.1 通用序列操作 48
3.1.1 索引 48
3.1.2 分片 50
3.1.3 序列相加 54
3.1.4 乘法 54
3.1.5 成員資格 55
3.1.6 長櫻市恥度、最小值和最大值 56
3.2 列表 57
3.2.1 更新列表 57
3.2.2 嵌套列表 63
3.2.3 列表方法 64
3.3 元組 73
3.3.1 tuple函式 74
3.3.2 元組的基本操作 74
3.3.3 元組內置函式 76
3.4 列表與元組的區別 77
3.5 牛刀小試——實現楊輝三角 78
3.6 調試 79
3.7 問題解答 81
3.8 溫故知新,學以致用 81
第4章 字元串 83
4.1 字元串的簡單操作 83
4.2 字元串格式化 85
4.2.1 經典的字元串格式化符號——
百分號(%) 85
4.2.2 元組的字元串格式化 87
4.2.3 format字元串格式化 90
4.2.4 f字元串格式化 90
4.2.5 f-string字元串格式化 91
4.3 字元串方法 92
4.3.1 split()方法 92
4.3.2 strip()方法 93
4.3.3 join()方法 93
4.3.4 find()方法 94
4.3.5 lower()方法 95
4.3.6 upper()方法 96
4.3.7 replace()方法 97
4.3.8 swapcase()方法 97
4.3.9 translate()方法 98
4.4 牛刀小試——變形金剛 99
4.5 調試 99
4.6 問題解答 100
4.7 溫故知新,學以致用 100
第5章 字典和集合 102
5.1 字典的使用 102
5.2 創建和使用字典 103
5.2.1 dict函式 104
5.2.2 字典的基本操作 105
5.2.3 字典和列表比較 107
5.3 字典方法 108
5.3.1 get()方法 108
5.3.2 keys()方法 109
5.3.3 values()方法 109
5.3.4 key in dict方法 110
5.3.5 update()方法 110
5.3.6 clear()方法 111
5.3.7 copy()方法 112
5.3.8 fromkeys()方法 112
5.3.9 items()方法 113
5.3.10 setdefault()方法 113
5.4 集合 114
5.4.1 創建集合 115
5.4.2 集合方法 116
5.5 牛刀小試——字典合併與排序 117
5.6 調試 118
5.7 問題解答 118
5.8 溫故知新,學以致用 119
第6章 條件、循環和其他語句 120
6.1 使用文本編輯器 120
6.2 import的使用 122
6.2.1 import語句 122
6.2.2 使用逗號輸出 125
6.3 別樣的賦值 125
6.3.1 序列解包 126
6.3.2 鏈式賦值 127
6.3.3 增量賦值 127
6.4 語句塊 128
6.5 條件語句 128
6.5.1 布爾變數的作用 128
6.5.2 if語句 130
6.5.3 else子句 131
6.5.4 elif子句 131
6.5.5 嵌套代碼塊 132
6.5.6 更多操作 132
6.5.7 斷言 135
6.6 循環 135
6.6.1 while循環 136
6.6.2 for循環 137
6.6.3 循環遍歷字典元素 139
6.6.4 疊代工具 139
6.6.5 跳出循環 141
6.6.6 循環中的else子句 143
6.7 pass語句 144
6.8 牛刀小試——猜字遊戲編寫 145
6.9 Python程式調試 146
6.10 問題解答 146
6.11 溫故知新,學以致用 147
第7章 函式 148
7.1 調用函式 148
7.2 定義函式 150
7.3 函式的參數 152
7.3.1 必須參數 153
7.3.2 關鍵字參數 153
7.3.3 默認參數 154
7.3.4 可變參數 157
7.3.5 組合參數 158
7.3.6 僅通過位置指定的參數 159
7.4 執行流程 160
7.5 形參和實參 161
7.6 變數的作用域 162
7.6.1 局部變數 162
7.6.2 全局變數 164
7.7 有返回值和無返回值函式 166
7.8 為什麼要引入函式 167
7.9 返回函式 167
7.10 遞歸函式 170
7.11 匿名函式 172
7.12 偏函式 174
7.13 牛刀小試——經典排序之快速排序
實現 175
7.14 調試 176
7.15 問題解答 177
7.16 溫故知新,學以致用 177
第8章 面向對象編程 179
8.1 理解面向對象 179
8.1.1 什麼是面向對象編程 179
8.1.2 面向對象編程常用術語 180
8.2 類的定義與使用 180
8.2.1 類的定義 180
8.2.2 類的使用 181
8.3 深入類 182
8.3.1 類的構造方法 182
8.3.2 類的訪問許可權 185
8.4 繼承 190
8.5 多態 193
8.6 封裝 196
8.7 多重繼承 197
8.8 獲取對象信息 199
8.9 類的專有方法 201
8.10 牛刀小試一——出行建議 205
8.11 牛刀小試二——判斷一棵樹是否為
二叉搜尋樹 207
8.12 調試 208
8.13 問題解答 209
8.14 溫故知新,學以致用 209
第9章 異常 211
9.1 什麼是異常 211
9.2 異常處理 212
9.3 拋出異常 213
9.4 捕捉多個異常 214
9.5 使用一個塊捕捉多個異常 215
9.6 捕捉對象 216
9.7 全捕捉 216
9.8 異常中的else 217
9.9 自定義異常 218
9.10 finally子句 219
9.11 異常和函式 220
9.12 牛刀小試——正常數和異常數 221
9.13 bug的由來 222
9.14 溫故知新,學以致用 223
第10章 日期和時間 224
10.1 日期和時間 224
10.1.1 時間戳 224
10.1.2 時間格式化符號 225
10.1.3 struct_time元組 226
10.2 time模組 226
10.2.1 time()函式 226
10.2.2 strftime()函式 228
10.2.3 strptime()函式 228
10.2.4 localtime()函式 229
10.2.5 sleep()函式 229
10.2.6 gmtime()函式 230
10.2.7 mktime()函式 230
10.2.8 asctime()函式 231
10.2.9 ctime()函式 231
10.2.10 三種時間格式轉化 232
10.3 datetime模組 232
10.4 日曆模組 236
10.5 牛刀小試——時間大雜燴 237
10.6 調試 241
10.7 溫故知新,學以致用 242
第11章 正則表達式 243
11.1 認識正則表達式 243
11.2 re模組 245
11.2.2 re.search方法 246
11.2.3 re.match與re.search的區別 246
11.3 貪婪模式和非貪婪模式 247
11.4 替換 248
11.5 編譯 249
11.6 牛刀小試——匹配比較 249
11.7 溫故知新,學以致用 250
第12章 檔案操作 251
12.1 打開檔案 251
12.1.1 檔案模式 253
12.1.2 快取 253
12.2 基本檔案方法 254
12.2.1 讀和寫 254
12.2.2 讀寫行 257
12.2.3 關閉檔案 258
12.2.4 檔案重命名 259
12.2.5 刪除檔案 259
12.3 對檔案內容進行疊代 260
12.3.1 按位元組處理 260
12.3.2 按行操作 261
12.3.3 使用fileinput實現懶載入式
疊代 261
12.3.4 檔案疊代器 262
12.4 StringIO函式 262
12.5 序列化與反序列化 263
12.5.1 一般序列化與反序列化 263
12.5.2 JSON序列化與反序列化 264
12.6 牛刀小試——批量更改檔案名稱 266
12.7 調試 267
12.8 問題解答 267
12.9 溫故知新,學以致用 267
第13章 多執行緒 269
13.1 執行緒和進程 269
13.1.1 進程 269
13.1.2 執行緒 270
13.1.3 多執行緒與多進程 270
13.2 使用執行緒 271
13.2.2 退出執行緒 272
13.2.3 Python的執行緒模組 272
13.3 _thread模組 272
13.4 threading模組與Thread類 275
13.4.1 threading模組 275
13.4.2 Thread類 275
13.5 執行緒同步 279
13.6 執行緒優先權佇列 281
13.7 執行緒與進程比較 283
13.7.1 執行緒切換 283
13.7.2 計算密集型與IO密集型 284
13.7.3 異步IO 284
13.8 牛刀小試——多執行緒簡單爬蟲 285
13.9 調試 286
13.10 問題解答 286
13.11 溫故知新,學以致用 287
第14章 傳送和接收電子郵件 288
14.1 電子郵件介紹 288
14.2 傳送郵件 290
14.2.1 SMTP傳送郵件 290
14.2.2 傳送HTML格式的郵件 292
14.2.3 傳送帶附屬檔案的郵件 293
14.2.4 傳送圖片 294
14.2.5 同時支持HTML和Plain
格式 296
14.2.6 加密SMTP 297
14.3 POP3接收郵件 298
14.3.1 POP3下載郵件 298
14.3.2 解析郵件 299
14.4 牛刀小試——郵件傳送通用化 300
14.5 調試 303
14.6 問題解答 304
14.7 溫故知新,學以致用 304
第15章 網路編程 305
15.1 初識網路編程 305
15.2 TCP/IP簡介 306
15.3 網路設計模組 307
15.3.1 socket簡介 307
15.3.2 socket模組 307
15.3.3 socket對象(內建)方法 309
15.4 TCP編程 310
15.4.1 客戶端編程 310
15.4.2 伺服器編程 312
15.5 UDP編程 316
15.6 urllib模組 318
15.6.1 GET請求 318
15.6.2 POST請求 319
15.7 牛刀小試——模擬瀏覽器 320
15.8 調試 321
15.9 問題解答 322
15.10 溫故知新,學以致用 322
第16章 GUI編程 323
16.1 GUI簡介 323
16.1.1 常用GUI庫簡介 323
16.1.2 安裝tkinter 324
16.2 概念介紹 324
16.2.1 視窗和控制項 324
16.2.2 事件驅動處理 325
16.2.3 布局管理器 325
16.3 tkinter的控制項 325
16.3.1 Button控制項 326
16.3.2 Checkbutton控制項 327
16.3.3 Label控制項 329
16.3.4 Text控制項 329
16.3.5 Menu控制項 330
16.4 tkinter組合控制項 332
16.5 牛刀小試——計算器開發 334
16.6 調試 338
16.7 問題解答 339
16.8 溫故知新,學以致用 339
第17章 運算元據庫 340
17.1 資料庫介紹 340
17.2 Python資料庫API 341
17.2.1 全局變數 341
17.2.2 異常 342
17.2.3 連線和游標 342
17.2.4 類型 344
17.3 資料庫操作 344
17.3.1 資料庫連線 344
17.3.2 創建資料庫表 345
17.3.3 資料庫插入 346
17.3.4 資料庫查詢 347
17.3.5 資料庫更新 348
17.3.6 資料庫刪除 349
17.4 事務 350
17.5 調試 351
17.6 問題解答 351
17.7 溫故知新,學以致用 352
第18章 網路爬蟲項目實戰 353
18.1 了解爬蟲 353
18.2 爬蟲的原理 354
18.3 爬蟲常用的幾種技巧 354
18.3.1 基本方法 354
18.3.2 使用代理伺服器 355
18.3.3 Cookie處理 355
18.3.4 偽裝成瀏覽器 356
18.3.5 登錄 356
18.4 爬蟲示例——抓取豆瓣電影Top250
影評數據 357
18.4.1 確定URL格式 357
18.4.2 頁面抓取 357
18.4.3 提取相關信息 358
18.4.4 寫入檔案 359
18.4.5 完善代碼 359
18.5 項目小結 362
第19章 自然語言分詞與詞頻統計
項目實戰 363
19.1 概念介紹 363
19.1.1 SQLAlchemy簡介 363
19.1.2 pyecharts簡介 364
19.1.3 jieba分詞庫簡介 364
19.1.4 BeautifulSoup庫簡介 364
19.2 庫的安裝與使用 364
19.2.1 SQLAlchemy的安裝與使用 365
19.2.2 pyecharts的安裝與使用 366
19.2.3 jieba分詞庫的安裝與使用 366
19.2.4 BeautifulSoup的安裝與使用 367
19.3 分詞與詞頻統計實戰 368
19.3.1 整體結構設計 368
19.3.2 數據結構設計 369
19.3.3 數據的爬取與保存 369
19.3.4 制定關鍵字庫 371
19.3.5 詞頻統計與圖表生成 372
19.4 分詞與詞頻統計完整代碼實現與
結果查看 373
19.5 項目小結 380
第20章 區塊鏈項目實戰 381
20.1 區塊鏈簡介 381
20.1.1 區塊鏈的定義 381
20.1.2 區塊鏈的特點 382
20.1.3 區塊鏈套用行業及領域 382
20.2 區塊鏈代碼結構設計 382
20.2.1 環境準備 382
20.2.2 代碼結構設計 382
20.3 區塊鏈具體邏輯實現 384
20.3.1 塊結構 384
20.3.2 加入交易 385
20.3.3 創建新塊 385
20.3.4 工作量證明的理解 386
20.3.5 工作量證明的實現 387
20.4 API接口層開發 387
20.4.1 傳送交易 388
20.4.2 挖礦 388
20.4.3 返回整個區塊鏈 389
20.5 運行區塊鏈 389
20.6 分散式實現 391
20.6.1 註冊節點 391
20.6.2 實現共識算法 391
20.7 完整項目代碼與執行 393
20.8 項目小結 405
第21章 圖片處理項目實戰 406
21.1 圖片處理基本庫簡介 406
21.2 讀取圖片大小 409
21.3 圖片完好性檢測 411
21.4 相同圖片檢測 412
21.5 項目小結 417
附錄A 418
A.1 數學函式 418
A.2 隨機函式 418
A.3 三角函式 419
A.4 Python字元串內建函式 419
A.5 列表方法 421
A.6 字典內置方法 421
A.7 正則表達式模式 421
5.3.4 key in dict方法 110
5.3.5 update()方法 110
5.3.6 clear()方法 111
5.3.7 copy()方法 112
5.3.8 fromkeys()方法 112
5.3.9 items()方法 113
5.3.10 setdefault()方法 113
5.4 集合 114
5.4.1 創建集合 115
5.4.2 集合方法 116
5.5 牛刀小試——字典合併與排序 117
5.6 調試 118
5.7 問題解答 118
5.8 溫故知新,學以致用 119
第6章 條件、循環和其他語句 120
6.1 使用文本編輯器 120
6.2 import的使用 122
6.2.1 import語句 122
6.2.2 使用逗號輸出 125
6.3 別樣的賦值 125
6.3.1 序列解包 126
6.3.2 鏈式賦值 127
6.3.3 增量賦值 127
6.4 語句塊 128
6.5 條件語句 128
6.5.1 布爾變數的作用 128
6.5.2 if語句 130
6.5.3 else子句 131
6.5.4 elif子句 131
6.5.5 嵌套代碼塊 132
6.5.6 更多操作 132
6.5.7 斷言 135
6.6 循環 135
6.6.1 while循環 136
6.6.2 for循環 137
6.6.3 循環遍歷字典元素 139
6.6.4 疊代工具 139
6.6.5 跳出循環 141
6.6.6 循環中的else子句 143
6.7 pass語句 144
6.8 牛刀小試——猜字遊戲編寫 145
6.9 Python程式調試 146
6.10 問題解答 146
6.11 溫故知新,學以致用 147
第7章 函式 148
7.1 調用函式 148
7.2 定義函式 150
7.3 函式的參數 152
7.3.1 必須參數 153
7.3.2 關鍵字參數 153
7.3.3 默認參數 154
7.3.4 可變參數 157
7.3.5 組合參數 158
7.3.6 僅通過位置指定的參數 159
7.4 執行流程 160
7.5 形參和實參 161
7.6 變數的作用域 162
7.6.1 局部變數 162
7.6.2 全局變數 164
7.7 有返回值和無返回值函式 166
7.8 為什麼要引入函式 167
7.9 返回函式 167
7.10 遞歸函式 170
10.2.10 三種時間格式轉化 232
10.3 datetime模組 232
10.4 日曆模組 236
10.5 牛刀小試——時間大雜燴 237
10.6 調試 241
10.7 溫故知新,學以致用 242
第11章 正則表達式 243
11.1 認識正則表達式 243
11.2 re模組 245
11.2.2 re.search方法 246
11.2.3 re.match與re.search的區別 246
11.3 貪婪模式和非貪婪模式 247
11.4 替換 248
11.5 編譯 249
11.6 牛刀小試——匹配比較 249
11.7 溫故知新,學以致用 250
第12章 檔案操作 251
12.1 打開檔案 251
12.1.1 檔案模式 253
12.1.2 快取 253
12.2 基本檔案方法 254
12.2.1 讀和寫 254
12.2.2 讀寫行 257
12.2.3 關閉檔案 258
12.2.4 檔案重命名 259
12.2.5 刪除檔案 259
12.3 對檔案內容進行疊代 260
12.3.1 按位元組處理 260
12.3.2 按行操作 261
12.3.3 使用fileinput實現懶載入式
疊代 261
12.3.4 檔案疊代器 262
12.4 StringIO函式 262
12.5 序列化與反序列化 263
12.5.1 一般序列化與反序列化 263
12.5.2 JSON序列化與反序列化 264
12.6 牛刀小試——批量更改檔案名稱 266
12.7 調試 267
12.8 問題解答 267
12.9 溫故知新,學以致用 267
第13章 多執行緒 269
13.1 執行緒和進程 269
13.1.1 進程 269
13.1.2 執行緒 270
13.1.3 多執行緒與多進程 270
13.2 使用執行緒 271
13.2.2 退出執行緒 272
13.2.3 Python的執行緒模組 272
13.3 _thread模組 272
13.4 threading模組與Thread類 275
13.4.1 threading模組 275
13.4.2 Thread類 275
13.5 執行緒同步 279
13.6 執行緒優先權佇列 281
13.7 執行緒與進程比較 283
13.7.1 執行緒切換 283
13.7.2 計算密集型與IO密集型 284
13.7.3 異步IO 284
13.8 牛刀小試——多執行緒簡單爬蟲 285
13.9 調試 286
13.10 問題解答 286
13.11 溫故知新,學以致用 287
第14章 傳送和接收電子郵件 288
14.1 電子郵件介紹 288
14.2 傳送郵件 290
14.2.1 SMTP傳送郵件 290
14.2.2 傳送HTML格式的郵件 292
14.2.3 傳送帶附屬檔案的郵件 293
14.2.4 傳送圖片 294
14.2.5 同時支持HTML和Plain
格式 296
14.2.6 加密SMTP 297
14.3 POP3接收郵件 298
14.3.1 POP3下載郵件 298
14.3.2 解析郵件 299
14.4 牛刀小試——郵件傳送通用化 300
14.5 調試 303
14.6 問題解答 304
14.7 溫故知新,學以致用 304
第15章 網路編程 305
15.1 初識網路編程 305
15.2 TCP/IP簡介 306
15.3 網路設計模組 307
15.3.1 socket簡介 307
15.3.2 socket模組 307
15.3.3 socket對象(內建)方法 309
15.4 TCP編程 310
15.4.1 客戶端編程 310
15.4.2 伺服器編程 312
15.5 UDP編程 316
15.6 urllib模組 318
15.6.1 GET請求 318
15.6.2 POST請求 319
15.7 牛刀小試——模擬瀏覽器 320
15.8 調試 321
15.9 問題解答 322
15.10 溫故知新,學以致用 322
第16章 GUI編程 323
16.1 GUI簡介 323
16.1.1 常用GUI庫簡介 323
16.1.2 安裝tkinter 324
16.2 概念介紹 324
16.2.1 視窗和控制項 324
16.2.2 事件驅動處理 325
16.2.3 布局管理器 325
16.3 tkinter的控制項 325
16.3.1 Button控制項 326
16.3.2 Checkbutton控制項 327
16.3.3 Label控制項 329
16.3.4 Text控制項 329
16.3.5 Menu控制項 330
16.4 tkinter組合控制項 332
16.5 牛刀小試——計算器開發 334
16.6 調試 338
16.7 問題解答 339
16.8 溫故知新,學以致用 339
第17章 運算元據庫 340
17.1 資料庫介紹 340
17.2 Python資料庫API 341
17.2.1 全局變數 341
17.2.2 異常 342
17.2.3 連線和游標 342
17.2.4 類型 344
17.3 資料庫操作 344
17.3.1 資料庫連線 344
17.3.2 創建資料庫表 345
17.3.3 資料庫插入 346
17.3.4 資料庫查詢 347
17.3.5 資料庫更新 348
17.3.6 資料庫刪除 349
17.4 事務 350
17.5 調試 351
17.6 問題解答 351
17.7 溫故知新,學以致用 352
第18章 網路爬蟲項目實戰 353
18.1 了解爬蟲 353
18.2 爬蟲的原理 354
18.3 爬蟲常用的幾種技巧 354
18.3.1 基本方法 354
18.3.2 使用代理伺服器 355
18.3.3 Cookie處理 355
18.3.4 偽裝成瀏覽器 356
18.3.5 登錄 356
18.4 爬蟲示例——抓取豆瓣電影Top250
影評數據 357
18.4.1 確定URL格式 357
18.4.2 頁面抓取 357
18.4.3 提取相關信息 358
18.4.4 寫入檔案 359
18.4.5 完善代碼 359
18.5 項目小結 362
第19章 自然語言分詞與詞頻統計
項目實戰 363
19.1 概念介紹 363
19.1.1 SQLAlchemy簡介 363
19.1.2 pyecharts簡介 364
19.1.3 jieba分詞庫簡介 364
19.1.4 BeautifulSoup庫簡介 364
19.2 庫的安裝與使用 364
19.2.1 SQLAlchemy的安裝與使用 365
19.2.2 pyecharts的安裝與使用 366
19.2.3 jieba分詞庫的安裝與使用 366
19.2.4 BeautifulSoup的安裝與使用 367
19.3 分詞與詞頻統計實戰 368
19.3.1 整體結構設計 368
19.3.2 數據結構設計 369
19.3.3 數據的爬取與保存 369
19.3.4 制定關鍵字庫 371
19.3.5 詞頻統計與圖表生成 372
19.4 分詞與詞頻統計完整代碼實現與
結果查看 373