第1章 Python語言概述和開發環境1
1.1 Python簡介2
1.1.1 Python簡史2
1.1.2 Python的特點3
1.2 Python程序運行機制3
1.3 開發Python的準備4
1.3.1 在Windows上安裝Python4
1.3.2 在Linux上安裝Python6
1.3.3 在Mac OS X上安裝Python7
1.4 **個Python程序7
1.4.1 編輯Python源程序7
1.4.2 使用IDLE運行Python程序8
1.4.3 使用命令行工具運行Python程序8
1.5 交互式解釋器10
1.6 本章小結11
本章練習11
第2章 變量和簡單類型12
2.1 單行注釋和多行注釋13
2.2 變量14
2.2.1 Python是弱類型語言14
2.2.2 使用print函數輸出變量15
2.2.3 變量的命名規則16
2.2.4 Python的關鍵字和內置函數17
2.3 數值類型18
2.3.1 整型18
2.3.2 浮點型20
2.3.3 復數20
2.4 字符串入門21
2.4.1 字符串和轉義字符21
2.4.2 拼接字符串22
2.4.3 repr和字符串22
2.4.4 使用input和raw_input獲取用戶
輸入23
2.4.5 長字符串24
2.4.6 原始字符串24
2.4.7 字節串(bytes)25
2.5 深入使用字符串27
2.5.1 轉義字符27
2.5.2 字符串格式化27
2.5.3 序列相關方法29
2.5.4 大小寫相關方法30
2.5.5 刪除空白32
2.5.6 查找、替換相關方法32
2.5.7 分割、連接方法34
2.6 運算符34
2.6.1 賦值運算符34
2.6.2 算術運算符35
2.6.3 位運算符37
2.6.4 擴展后的賦值運算符40
2.6.5 索引運算符40
2.6.6 比較運算符與bool類型40
2.6.7 邏輯運算符41
2.6.8 三目運算符42
2.6.9 in運算符43
2.6.10 運算符的結合性和優先級43
2.7 本章小結44
本章練習44
第3章 列表、元組和字典46
3.1 序列簡介47
3.1.1 Python的序列47
3.1.2 創建列表和元組47
3.2 列表和元組的通用用法48
3.2.1 通過索引使用元素48
3.2.2 子序列48
3.2.3 加法49
3.2.4 乘法49
3.2.5 in運算符50
3.2.6 長度、*大值和*小值50
3.2.7 序列封包和序列解包51
3.3 使用列表52
3.3.1 創建列表52
3.3.2 增加列表元素53
3.3.3 刪除列表元素54
3.3.4 修改列表元素55
3.3.5 列表的其他常用方法56
3.4 使用字典58
3.4.1 字典入門58
3.4.2 創建字典58
3.4.3 字典的基本用法59
3.4.4 字典的常用方法60
3.4.5 使用字典格式化字符串63
3.5 本章小結63
本章練習64
第4章 流程控制65
4.1 順序結構66
4.2 if分支結構66
4.2.1 不要忘記縮進67
4.2.2 不要隨意縮進69
4.2.3 不要遺忘冒號70
4.2.4 if條件的類型70
4.2.5 if分支的邏輯錯誤71
4.2.6 if表達式72
4.2.7 pass語句72
4.3 斷言73
4.4 循環結構73
4.4.1 while循環73
4.4.2 使用while循環遍歷列表和元組74
4.4.3 for-in循環75
4.4.4 使用for-in循環遍歷列表和元組76
4.4.5 使用for-in循環遍歷字典77
4.4.6 循環使用else78
4.4.7 嵌套循環79
4.4.8 for表達式80
4.4.9 常用工具函數82
4.5 控制循環結構83
4.5.1 使用break結束循環83
4.5.2 使用continue忽略本次循環的剩
下語句85
4.5.3 使用return結束方法85
4.6 牛刀小試86
4.6.1 數字轉人民幣讀法86
4.6.2 繞圈圈87
4.6.3 控制臺五子棋89
4.6.4 控制臺超市系統90
4.7 本章小結94
本章練習94
第5章 函數和lambda表達式97
5.1 函數入門98
5.1.1 理解函數98
5.1.2 定義函數和調用函數99
5.1.3 為函數提供文檔100
5.1.4 多個返回值100
5.1.5 遞歸函數101
5.2 函數的參數102
5.2.1 關鍵字(keyword)參數102
5.2.2 參數默認值103
5.2.3 參數收集(個數可變的參數)105
5.2.4 逆向參數收集106
5.2.5 函數的參數傳遞機制107
5.2.6 變量作用域111
5.3 局部函數113
5.4 函數的高級內容114
5.4.1 使用函數變量115
5.4.2 使用函數作為函數形參115
5.4.3 使用函數作為返回值116
5.5 局部函數與lambda表達式117
5.5.1 回顧局部函數117
5.5.2 使用lambda表達式代替局部函數118
5.6 本章小結119
本章練習119
第6章 類和對象120
6.1 類和對象121
6.1.1 定義類121
6.1.2 對象的產生和使用122
6.1.3 對象的動態性123
6.1.4 實例方法和自動綁定self124
6.2 方法126
6.2.1 類也能調用實例方法126
6.2.2 類方法與靜態方法128
6.2.3 @函數裝飾器128
6.2.4 再論類命名空間131
6.3 成員變量131
6.3.1 類變量和實例變量131
6.3.2 使用property函數定義屬性134
6.4 隱藏和封裝137
6.5 類的繼承139
6.5.1 繼承的語法139
6.5.2 關于多繼承140
6.5.3 重寫父類的方法140
6.5.4 使用未綁定方法調用被重寫的
方法141
6.5.5 使用super函數調用父類的構造
方法142
6.6 Python的動態性143
6.6.1 動態屬性與__slots__144
6.6.2 使用type()函數定義類145
6.6.3 使用metaclass146
6.7 多態147
6.7.1 多態性147
6.7.2 檢查類型149
6.8 枚舉類150
6.8.1 枚舉入門150
6.8.2 枚舉的構造器152
6.9 本章小結153
本章練習153
第7章 異常處理154
7.1 異常概述155
7.2 異常處理機制156
7.2.1 使用try...except捕獲異常156
7.2.2 異常類的繼承體系157
7.2.3 多異常捕獲159
7.2.4 訪問異常信息160
7.2.5 else塊161
7.2.6 使用finally回收資源163
7.2.7 異常處理嵌套165
7.3 使用raise引發異常165
7.3.1 引發異常165
7.3.2 自定義異常類166
7.3.3 except和raise同時使用167
7.3.4 raise不需要參數168
7.4 Python的異常傳播軌跡168
7.5 異常處理規則170
7.5.1 不要過度使用異常171
7.5.2 不要使用過于龐大的try塊172
7.5.3 不要忽略捕獲到的異常172
7.6 本章小結172
本章練習173
第8章 Python類的特殊方法174
8.1 常見的特殊方法175
8.1.1 重寫__repr__方法175
8.1.2 析構方法:__del__176
8.1.3 __dir__方法177
8.1.4 __dict__屬性178
8.1.5 __getattr__、__setattr__等178
8.2 與反射相關的屬性和方法180
8.2.1 動態操作屬性180
8.2.2 __call__屬性182
8.3 與序列相關的特殊方法183
8.3.1 序列相關方法183
8.3.2 實現迭代器185
8.3.3 擴展列表、元組和字典186
8.4 生成器186
8.4.1 創建生成器187
8.4.2 生成器的方法189
8.5 運算符重載的特殊方法191
8.5.1 與數值運算符相關的特殊方法191
8.5.2 與比較運算符相關的特殊方法194
8.5.3 與單目運算符相關的特殊方法195
8.5.4 與類型轉換相關的特殊方法196
8.5.5 與常見的內建函數相關的特殊
方法197
8.6 本章小結198
本章練習198
第9章 模塊和包199
9.1 模塊化編程200
9.1.1 導入模塊的語法200
9.1.2 定義模塊203
9.1.3 為模塊編寫說明文檔203
9.1.4 為模塊編寫測試代碼204
9.2 加載模塊205
9.2.1 使用環境變量205
9.2.2 默認的模塊加載路徑208
9.2.3 導入模塊的本質209
9.2.4 模塊的__all__變量211
9.3 使用包212
9.3.1 什么是包212
9.3.2 定義包212
9.3.3 導入包內成員214
9.4 查看模塊內容216
9.4.1 模塊包含什么216
9.4.2 使用__doc__屬性查看文檔217
9.4.3 使用__file__屬性查看模塊的源
文件路徑218
9.5 本章小結218
本章練習218
第10章 常見模塊219
10.1 sys220
10.1.1 獲取運行參數222
10.1.2 動態修改模塊加載路徑223
10.2 os模塊223
10.3 random225
10.4 time227
10.5 JSON支持230
10.5.1 JSON的基本知識230
10.5.2 Python的JSON支持232
10.6 正則表達式236
10.6.1 Python的正則表達式支持236
10.6.2 正則表達式旗標241
10.6.3 創建正則表達式242
10.6.4 子表達式244
10.6.5 貪婪模式與勉強模式246
10.7 容器相關類247
10.7.1 set和frozenset248
10.7.2 雙端隊列(deque)250
10.7.3 Python的堆操作253
10.8 collections下的容器支持255
10.8.1 ChainMap對象255
10.8.2 Counter對象257
10.8.3 defaultdict對象260
10.8.4 namedtuple工廠函數261
10.8.5 OrderedDict對象262
10.9 函數相關模塊264
10.9.1 itertools模塊的功能函數264
10.9.2 functools模塊的功能函數267
10.10 本章小結273
本章練習273
第11章 圖形界面編程275
11.1 Python的GUI庫276
11.2 Tkinter GUI編程的組件277
11.3 布局管理器283
11.3.1 Pack布局管理器283
11.3.2 Grid布局管理器285
11.3.3 Place布局管理器287
11.4 事件處理288
11.4.1 簡單的事件處理289
11.4.2 事件綁定289
11.5 Tkinter常用組件293
11.5.1 使用ttk組件293
11.5.2 Variable類294
11.5.3 使用compound選項295
11.5.4 Entry和Text組件297
11.5.5 Radiobutton和Checkbutton組件300
11.5.6 Listbox和Combobox組件303
11.5.7 Spinbox組件308
11.5.8 Scale和LabeledScale組件309
11.5.9 Labelframe組件312
11.5.10 Panedwindow組件314
11.5.11 OptionMenu組件316
11.6 對話框(Dialog)318
11.6.1 普通對話框318
11.6.2 自定義模式、非模式對話框320
11.6.3 輸入對話框322
11.6.4 文件對話框324
11.6.5 顏色選擇對話框326
11.6.6 消息框327
11.7 菜單330
11.7.1 窗口菜單330
11.7.2 右鍵菜單334
11.8 在Canvas中繪圖336
11.8.1 Tkinter Canvas的繪制功能336
11.8.2 操作圖形項的標簽343
11.8.3 操作圖形項345
11.8.4 為圖形項綁定事件349
11.8.5 繪制動畫354
11.9 本章小結357
本章練習357
第12章 文件I/O358
12.1 使用pathlib模塊操作目錄359
12.1.1 PurePath的基本功能360
12.1.2 PurePath的屬性和方法362
12.1.3 Path的功能和用法363
12.2 使用os.path操作目錄365
12.3 使用fnmatch處理文件名匹配366
12.4 打開文件367
12.4.1 文件打開模式367
12.4.2 緩沖368
12.5 讀取文件369
12.5.1 按字節或字符讀取369
12.5.2 按行讀取371
12.5.3 使用fileinput讀取多個輸入流371
12.5.4 文件迭代器372
12.5.5 管道輸入373
12.5.6 使用with語句374
12.5.7 使用linecache隨機讀取指定行376
12.6 寫文件376
12.6.1 文件指針的概念376
12.6.2 輸出內容377
12.7 os模塊的文件和目錄函數378
12.7.1 與目錄相關的函數379
12.7.2 與權限相關的函數380
12.7.3 與文件訪問相關的函數381
12.8 使用tempfile模塊生成臨時文件和
臨時目錄383
12.9 本章小結385
本章練習385
第13章 數據庫編程386
13.1 Python數據庫API簡介387
13.1.1 全局變量387
13.1.2 數據庫API的核心類388
13.1.3 操作數據庫的基本流程389
13.2 操作SQLite數據庫389
13.2.1 創建數據表390
13.2.2 使用SQLite Expert工具391
13.2.3 使用序列重復執行DML語句393
13.2.4 執行查詢395
13.2.5 事務控制396
13.2.6 執行SQL腳本397
13.2.7 創建自定義函數398
13.2.8 創建聚集函數399
13.2.9 創建比較函數400
13.3 操作MySQL數據庫401
13.3.1 下載和安裝MySQL數據庫401
13.3.2 使用pip工具管理模塊404
13.3.3 執行DDL語句405
13.3.4 執行DML語句407
13.3.5 執行查詢語句408
13.3.6 調用存儲過程409
13.4 本章小結410
本章練習411
第14章 并發編程412
14.1 線程概述413
14.1.1 線程和進程413
14.1.2 多線程的優勢414
14.2 線程的創建和啟動415
14.2.1 調用Thread類的構造器創建
線程415
14.2.2 繼承Thread類創建線程類417
14.3 線程的生命周期418
14.3.1 新建和就緒狀態418
14.3.2 運行和阻塞狀態419
14.3.3 線程死亡420
14.4 控制線程421
14.4.1 join線程422
14.4.2 后臺線程422
14.4.3 線程睡眠:sleep423
14.5 線程同步424
14.5.1 線程安全問題424
14.5.2 同步鎖(Lock)425
14.5.3 死鎖428
14.6 線程通信430
14.6.1 使用Condition實現線程通信430
14.6.2 使用隊列(Queue)控制線程
通信433
14.6.3 使用Event控制線程通信434
14.7 線程池436
14.7.1 使用線程池437
14.7.2 獲取執行結果439
14.8 線程相關類440
14.8.1 線程局部變量440
14.8.2 定時器441
14.8.3 任務調度442
14.9 多進程443
14.9.1 使用fork創建新進程443
14.9.2 使用multiprocessing.Process創建
新進程444
14.9.3 Context和啟動進程的方式446
14.9.4 使用進程池管理進程448
14.9.5 進程通信449
14.10 本章小結451
本章練習451
第15章 網絡編程452
15.1 網絡編程的基礎知識453
15.1.1 網絡基礎知識453
15.1.2 IP地址和端口號454
15.2 Python的基本網絡支持455
15.2.1 Python的網絡模塊概述455
15.2.2 使用urllib.parse子模塊456
15.2.3 使用urllib.request讀取資源459
15.2.4 管理cookie464
15.3 基于TCP協議的網絡編程467
15.3.1 TCP協議基礎467
15.3.2 使用socket創建TCP服務器端468
15.3.3 使用socket通信469
15.3.4 加入多線程470
15.3.5 記錄用戶信息472
15.3.6 半關閉的socket477
15.3.7 selectors模塊478
15.4 基于UDP協議的網絡編程480
15.4.1 UDP協議基礎480
15.4.2 使用socket發送和接收數據481
15.4.3 使用UDP協議實現多點廣播483
15.5 電子郵件支持484
15.5.1 使用smtplib模塊發送郵件484
15.5.2 使用poplib模塊收取郵件488
15.6 本章小結491
本章練習491
第16章 文檔和測試492
16.1 使用pydoc生成文檔493
16.1.1 在控制臺中查看文檔494
16.1.2 生成HTML文檔495
16.1.3 啟動本地服務器來查看文檔信息495
16.1.4 查找模塊496
16.2 軟件測試概述497
16.2.1 軟件測試的概念和目的497
16.2.2 軟件測試的分類498
16.2.3 開發活動和測試活動499
16.2.4 常見的Bug管理工具499
16.3 文檔測試500
16.4 單元測試502
16.4.1 單元測試概述502
16.4.2 單元測試的邏輯覆蓋504
16.5 使用PyUnit(unittest)506
16.5.1 PyUnit(unittest)的用法507
16.5.2 運行測試510
16.5.3 使用測試包511
16.5.4 測試固件之setUp和tearDown513
16.5.5 跳過測試用例515
16.6 本章小結516
本章練習516
第17章 打包和發布517
17.1 使用zipapp模塊518
17.1.1 生成可執行的Python檔案包518
17.1.2 創建獨立應用519
17.2 使用PyInstaller生成可執行程序520
17.2.1 安裝PyInstaller520
17.2.2 生成可執行程序521
17.3 本章小結523
本章練習523
第18章 合金彈頭524
18.1 合金彈頭游戲簡介525
18.2 pygame簡介525
18.2.1 安裝pygame526
18.2.2 pygame常用的游戲API527
18.3 開發游戲界面組件529
18.3.1 游戲界面分析529
18.3.2 實現“怪物”類529
18.3.3 實現怪物管理534
18.3.4 實現“子彈”類536
18.3.5 加載、管理游戲圖片538
18.3.6 讓游戲“運行”起來540
18.4 增加“角色”541
18.4.1 開發“角色”類541
18.4.2 添加角色547
18.5 合理繪制地圖550
18.6 增加音效551
18.7 增加游戲場景554
18.8 本章小結558
本章練習558
第19章 數據可視化559
19.1 使用Matplotlib生成數據圖560
19.1.1 安裝Matplotlib包560
19.1.2 Matplotlib數據圖入門561
19.1.3 管理圖例562
19.1.4 管理坐標軸565
19.1.5 管理多個子圖566
19.2 功能豐富的數據圖570
19.2.1 餅圖570
19.2.2 柱狀圖571
19.2.3 水平柱狀圖573
19.2.4 散點圖574
19.2.5 等高線圖576
19.2.6 3D圖形577
19.3 使用Pygal生成數據圖578
19.3.1 安裝Pygal包578
19.3.2 Pygal數據圖入門578
19.3.3 配置Pygal數據圖580
19.4 Pygal支持的常見數據圖581
19.4.1 折線圖581
19.4.2 水平柱狀圖和水平折線圖581
19.4.3 疊加柱狀圖和疊加折線圖582
19.4.4 餅圖583
19.4.5 點圖584
19.4.6 儀表(Gauge)圖585
19.4.7 雷達圖586
19.5 處理數據587
19.5.1 CSV文件格式587
19.5.2 JSON數據590
19.5.3 數據清洗593
19.5.4 讀取網絡數據595
19.6 本章小結597
本章練習597
第20章 網絡爬蟲598
20.1 Scrapy簡介599
20.1.1 了解Scrapy599
20.1.2 安裝Scrapy600
20.2 使用爬蟲爬取、分析招聘信息601
20.2.1 創建Scrapy項目601
20.2.2 使用shell調試工具603
20.2.3 Scrapy開發步驟606
20.2.4 使用JSON導出信息611
20.2.5 將數據寫入數據庫611
20.2.6 使用Pygal展示招聘信息612
20.3 處理反爬蟲613
20.3.1 使用shell調試工具分析目標站點614
20.3.2 使用Scrapy爬取高清圖片616
20.3.3 應對反爬蟲的常見方法618
20.3.4 整合Selenium模擬瀏覽器行為620
20.4 本章小結624
本章練習624