本書從Python 語言的基礎(chǔ)語法講起,逐步深入地介紹了Python各種庫,并且介紹了這些庫的實戰(zhàn)案例,重點介紹了爬蟲開發(fā), GUI應用程序開發(fā),容器管理, Redis數(shù)據(jù)庫操作以及數(shù)據(jù)處理和神經(jīng)網(wǎng)絡(luò)方面的內(nèi)容。讓讀者不但可以系統(tǒng)地學習Python編程的相關(guān)知識,而且還能對Python在各個領(lǐng)域的應用有更為深入的理解。
本書分為21章,涵蓋的主要內(nèi)容有Python語言基礎(chǔ)和Python在多個領(lǐng)域的應用。重點介紹了多線程編程; GUI應用程序開發(fā);web編程;爬蟲開發(fā);容器管理;數(shù)據(jù)處理以及神經(jīng)網(wǎng)絡(luò)上的應用。
本書內(nèi)容通俗易懂,案例豐富,實用性強,特別適合Python語言的入門讀者和進階讀者閱讀,也適合自動化測試人員、自動運維人員閱讀。另外,本書也適合作為相關(guān)培訓機構(gòu)的教材使用。
前言
第1篇 Python編程基礎(chǔ)
第1章 Python語言基礎(chǔ)2
1.1 Python語言介紹2
1.2 Python版本介紹3
1.2.1 Python語言的版本3
1.2.2 Python的實現(xiàn)版本4
1.3 集成開發(fā)環(huán)境9
1.3.1 PyCharm9
1.3.2 Anaconda10
1.4 代碼的運行方式17
1.5 網(wǎng)頁運行方式19
1.6 基本語法23
1.7 Python之禪26
第2章 基本數(shù)據(jù)類型28
2.1 整數(shù)類型28
2.1.1 整數(shù)的表示法28
2.1.2 數(shù)值運算29
2.1.3 位運算31
2.1.4 移位運算33
2.1.5 類型轉(zhuǎn)換34
2.1.6 其他進制表示法35
2.1.7 小整數(shù)池39
2.1.8 統(tǒng)計成績的例子40
2.1.9 韓信點兵的故事41
2.2 布爾類型42
2.2.1 布爾運算42
2.2.2 類型轉(zhuǎn)換44
2.2.3 例子:誰在說謊44
2.3 字節(jié)流46
2.4 浮點數(shù)50
2.4.1 基本運算51
2.4.2 其他運算52
2.4.3 類型轉(zhuǎn)換53
2.4.4 例子:求某個數(shù)的平方根53
2.5 列表54
2.5.1 列表特性55
2.5.2 常見操作56
2.5.3 找出丟失的數(shù)60
2.5.4 背包問題61
2.6 字符串63
2.6.1 str類型的字符串64
2.6.2 str類型的相關(guān)接口函數(shù)64
2.6.3 bytes類型68
2.6.4 str類型和bytes類型的轉(zhuǎn)換69
2.7 元組70
2.7.1 元組的表示法70
2.7.2 元組接口函數(shù)71
2.8 集合72
2.8.1 創(chuàng)建集合72
2.8.2 基本操作73
2.8.3 例子:刪除重復元素79
2.9 字典80
2.9.1 創(chuàng)建字典81
2.9.2 基本操作81
2.9.3 例子:合并結(jié)果86
2.9.4 例子:如何安全過河87
2.10 NoneType類型94
2.11 變量、對象和值的關(guān)系94
第3章 函數(shù)99
3.1 函數(shù)的定義和使用99
3.2 函數(shù)的返回值100
3.3 函數(shù)的參數(shù)100
3.3.1 位置參數(shù)101
3.3.2 將位置參數(shù)當作元組101
3.3.3 調(diào)用時使用元組和列表103
3.3.4 關(guān)鍵字參數(shù)104
3.3.5 將實參當作字典104
3.3.6 調(diào)用時使用字典105
3.3.7 默認值105
3.4 常見的系統(tǒng)自帶函數(shù)106
3.4.1 數(shù)據(jù)對象有關(guān)的函數(shù)106
3.4.2 數(shù)學計算有關(guān)的函數(shù)109
3.4.3 容器類型有關(guān)的函數(shù)111
3.4.4 屬性操作116
3.5 lambda函數(shù)117
3.6 遞歸調(diào)用118
3.6.1 遞歸調(diào)用介紹118
3.6.2 例子119
第4章 模塊和包126
4.1 模塊126
4.2 包128
4.3 軟件包的安裝129
4.3.1 復制源代碼到系統(tǒng)目錄129
4.3.2 使用PIP進行安裝130
4.3.3 使用easy_install和setup進行安裝134
第5章 文件操作135
5.1 文件的基本操作135
5.2 打開文件136
5.3 文件對象的操作137
5.4 關(guān)閉文件142
5.5 特殊文件143
5.6 文件對象的屬性145
第6章 基礎(chǔ)庫146
6.1 正則表達式庫146
6.1.1 元字符和語法147
6.1.2 C風格接口函數(shù)154
6.1.3 面向風格接口函數(shù)155
6.1.4 re.Match對象155
6.2 數(shù)學庫157
6.3 時間庫159
6.3.1 時間表示法159
6.3.2 接口函數(shù)160
6.4 日期庫162
6.5 二叉樹庫162
6.6 串行化庫164
6.6.1 基本流程164
6.6.2 pickle用法165
6.7 隨機數(shù)庫166
6.7.1 生成隨機整數(shù)和隨機實數(shù)167
6.7.2 其他形式的隨機169
6.7.3 偽隨機問題170
6.7.4 例子:計算面積171
6.7.5 游戲:五對胡172
第7章 異常處理177
7.1 Python中的異常處理177
7.1.1 捕捉異常177
7.1.2 沒有異常才執(zhí)行的分支180
7.1.3 無論有無異常都要執(zhí)行的分支181
7.2 拋出異常182
7.3 常見的系統(tǒng)定義異常183
第8章 類和對象187
8.1 類的定義和實例創(chuàng)建187
8.2 類的屬性189
8.3 初始化函數(shù)和銷毀函數(shù)190
8.4 實例對象的屬性192
8.4.1 類屬性和實例對象屬性的關(guān)系192
8.4.2 self在類定義中表示當前對象194
8.4.3 通過delattr()、setattr()等接口函數(shù)來操作屬性196
8.5 靜態(tài)方法198
8.6 類方法199
8.7 訪問控制199
8.8 只讀屬性200
8.8.1 使用@property修飾符200
8.8.2 重新定義__setattr__()函數(shù)201
8.9 類屬性的安全檢查202
8.10 派生類203
8.11 多重繼承204
第2篇 Python編程高級主題
第9章 多線程208
9.1 線程介紹208
9.2 Python中的線程209
9.2.1 主線程209
9.2.2 線程狀態(tài)209
9.3 thread包210
9.3.1 線程的啟動211
9.3.2 線程的退出212
9.4 threading包213
9.4.1 創(chuàng)建線程實例對象213
9.4.2 派生自己的線程類216
9.4.3 配置線程217
9.4.4 啟動線程218
9.4.5 停止線程219
9.4.6 等待線程結(jié)束220
9.4.7 其他接口函數(shù)221
9.5 線程同步222
9.5.1 線程鎖thread.Lock223
9.5.2 線程鎖threading.Lock224
9.5.3 可重入鎖threading.RLock225
9.5.4 條件變量threading.Condition227
9.5.5 信號量threading.Semaphore228
9.5.6 事件threading.Event231
9.6 線程安全233
9.7 死鎖236
第10章 多進程239
10.1 進程的概念239
10.2 subprocess模塊240
10.2.1 面向過程的接口函數(shù)241
10.2.2 Popen類244
10.3 multiprocessing模塊247
10.3.1 創(chuàng)建進程247
10.3.2 進程的屬性249
10.3.3 進程的接口函數(shù)253
10.3.4 進程池258
10.3.5 進程通信260
10.4 os模塊265
10.4.1 啟動進程——system()265
10.4.2 啟動進程并得到輸出——popen ()265
10.4.3 得到當前進程ID——getpid ()266
10.4.4 得到父進程ID——getppid ()266
第11章 迭代器和生成器268
11.1 迭代器268
11.2 生成器269
11.2.1 定義生成器270
11.2.2 接口函數(shù)270
第12章 裝飾器275
12.1 起源275
12.2 被裝飾函數(shù)帶有參數(shù)276
12.3 裝飾函數(shù)帶有參數(shù)279
12.4 裝飾函數(shù)帶有返回值280
12.5 使用多個裝飾器281
12.6 常用裝飾器282
12.6.1 類裝飾器282
12.6.2 退出時執(zhí)行的函數(shù)284
12.6.3 單例模式284
12.6.4 執(zhí)行時間限制285
12.6.5 執(zhí)行時間標定286
12.6.6 自動重新運行287
12.6.7 狀態(tài)機288
第13章 數(shù)據(jù)文件操作293
13.1 csv文件的處理293
13.2 yaml文件的處理296
13.3 json文件的處理298
第14章 軟件測試301
14.1 無框架的測試301
14.2 PyUnit測試框架305
14.2.1 運行方式307
14.2.2 生成測試報告309
14.2.3 測試步驟312
14.2.4 斷言317
14.2.5 測試用例的接口函數(shù)328
14.2.6 覆蓋率330
14.3 Pytest測試框架333
14.3.1 測試用例333
14.3.2 選擇執(zhí)行的測試用例335
14.3.3 生成測試報告339
14.3.4 測試步驟341
14.3.5 斷言345
14.3.6 覆蓋率346
14.3.7 插件349
第15章 網(wǎng)絡(luò)編程357
15.1 TCP/IP協(xié)議介紹357
15.2 socket介紹361
15.3 TCP echo服務器363
15.4 簡單的TCP客戶端364
15.5 UDP版的echo服務器365
第16章 容器操作367
16.1 Docker的安裝367
16.2 Docker的基本概念369
16.3 docker-py庫370
16.3.1 建立連接370
16.3.2 對Docker鏡像的操作371
16.3.3 運行Docker鏡像377
16.4 kubernetes庫379
第17章 Scrapy爬蟲框架388
17.1 Scrapy的安裝388
17.2 工作原理390
17.3 一個簡單的例子391
17.4 Scrapy的架構(gòu)圖393
17.5 爬蟲395
17.5.1 點贊統(tǒng)計例子395
17.5.2 爬蟲類396
17.6 一個完整的項目398
17.7 結(jié)果數(shù)據(jù)400
17.8 選擇器402
17.8.1 介紹403
17.8.2 text()404
17.8.3 extract()/extract_first()405
17.8.4 @屬性406
17.8.5 元素[@屬性] 406
17.9 設(shè)置407
17.9.1 命令行方式407
17.9.2 爬蟲范圍內(nèi)的設(shè)置408
17.9.3 項目范圍內(nèi)的設(shè)置408
17.9.4 命令默認設(shè)定409
17.9.5 全局默認設(shè)定409
17.9.6 讀取配置411
17.9.7 常用配置412
17.10 命令行工具414
17.10.1 創(chuàng)建項目414
17.10.2 創(chuàng)建爬蟲415
17.10.3 列出爬蟲模板416
17.10.4 查看某個爬蟲模板417
17.10.5 基于模板創(chuàng)建爬蟲418
17.10.6 啟動爬蟲418
17.10.7 爬蟲列表419
17.10.8 爬取指定頁面420
17.10.9 在瀏覽器中顯示頁面421
17.10.10 啟動交互式shell422
17.10.11 runspider423
17.10.12 標定Scrapy的性能424
17.10.13 其他命令425
17.11 爬取北京公交線路數(shù)據(jù)426
第18章 Flask Web開發(fā)框架429
18.1 Flask的安裝429
18.2 最簡單的Flask應用430
18.3 路由430
18.3.1 動態(tài)路由431
18.3.2 限定類型432
18.3.3 地址尾部的“/”433
18.4 運行應用的參數(shù)435
18.5 命令行方式運行436
18.6 HTTP的方法437
18.7 靜態(tài)文件437
18.8 模板438
18.8.1 變量439
18.8.2 表達式440
18.8.3 子模板442
第19章 鍵值數(shù)據(jù)庫Redis444
19.1 介紹444
19.2 服務器的安裝445
19.2.1 服務器容器下載446
19.2.2 啟動Redis容器446
19.3 Python客戶端的安裝448
19.4 元操作448
19.5 字符串數(shù)據(jù)的操作449
19.6 哈希數(shù)據(jù)的操作456
19.7 列表數(shù)據(jù)的操作458
19.8 集合數(shù)據(jù)的操作460
19.9 訂閱發(fā)布462
19.9.1 基本用法462
19.9.2 訂閱多個頻道465
19.9.3 頻道使用通配符466
19.10 設(shè)置時效467
19.11 管道模式467
第20章 圖形界面應用469
20.1 Tk和Tkinter469
20.1.1 基本程序結(jié)構(gòu)470
20.1.2 常用組件471
20.1.3 布局487
20.1.4 游戲2048489
20.2 wxPython494
20.2.1 程序基本結(jié)構(gòu)494
20.2.2 基本用戶界面元素495
20.3 PyQt508
20.3.1 基本程序結(jié)構(gòu)508
20.3.2 常用組件509
20.4 小結(jié)517
第21章 數(shù)據(jù)處理518
21.1 matplotlib518
21.2 NumPy526
21.2.1 ndarray的構(gòu)造526
21.2.2 ndarray的一些屬性531
21.2.3 ndarray的一些操作532
21.2.4 NumPy在金融領(lǐng)域的應用534
21.2.5 NumPy中的傅里葉變換537
21.2.6 神經(jīng)網(wǎng)絡(luò)應用541