本書從Python 語言的基礎(chǔ)語法講起,逐步深入地介紹了Python各種庫,并且介紹了這些庫的實(shí)戰(zhàn)案例,重點(diǎn)介紹了爬蟲開發(fā), GUI應(yīng)用程序開發(fā),容器管理, Redis數(shù)據(jù)庫操作以及數(shù)據(jù)處理和神經(jīng)網(wǎng)絡(luò)方面的內(nèi)容。讓讀者不但可以系統(tǒng)地學(xué)習(xí)Python編程的相關(guān)知識(shí),而且還能對Python在各個(gè)領(lǐng)域的應(yīng)用有更為深入的理解。
本書分為21章,涵蓋的主要內(nèi)容有Python語言基礎(chǔ)和Python在多個(gè)領(lǐng)域的應(yīng)用。重點(diǎn)介紹了多線程編程; GUI應(yīng)用程序開發(fā);web編程;爬蟲開發(fā);容器管理;數(shù)據(jù)處理以及神經(jīng)網(wǎng)絡(luò)上的應(yīng)用。
本書內(nèi)容通俗易懂,案例豐富,實(shí)用性強(qiáng),特別適合Python語言的入門讀者和進(jìn)階讀者閱讀,也適合自動(dòng)化測試人員、自動(dòng)運(yùn)維人員閱讀。另外,本書也適合作為相關(guān)培訓(xùn)機(jī)構(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的實(shí)現(xiàn)版本4
1.3 集成開發(fā)環(huán)境9
1.3.1 PyCharm9
1.3.2 Anaconda10
1.4 代碼的運(yùn)行方式17
1.5 網(wǎng)頁運(yùn)行方式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ù)值運(yùn)算29
2.1.3 位運(yùn)算31
2.1.4 移位運(yùn)算33
2.1.5 類型轉(zhuǎn)換34
2.1.6 其他進(jìn)制表示法35
2.1.7 小整數(shù)池39
2.1.8 統(tǒng)計(jì)成績的例子40
2.1.9 韓信點(diǎn)兵的故事41
2.2 布爾類型42
2.2.1 布爾運(yùn)算42
2.2.2 類型轉(zhuǎn)換44
2.2.3 例子:誰在說謊44
2.3 字節(jié)流46
2.4 浮點(diǎn)數(shù)50
2.4.1 基本運(yùn)算51
2.4.2 其他運(yùn)算52
2.4.3 類型轉(zhuǎn)換53
2.4.4 例子:求某個(gè)數(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 例子:刪除重復(fù)元素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ù)當(dāng)作元組101
3.3.3 調(diào)用時(shí)使用元組和列表103
3.3.4 關(guān)鍵字參數(shù)104
3.3.5 將實(shí)參當(dāng)作字典104
3.3.6 調(diào)用時(shí)使用字典105
3.3.7 默認(rèn)值105
3.4 常見的系統(tǒng)自帶函數(shù)106
3.4.1 數(shù)據(jù)對象有關(guān)的函數(shù)106
3.4.2 數(shù)學(xué)計(jì)算有關(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 復(fù)制源代碼到系統(tǒng)目錄129
4.3.2 使用PIP進(jìn)行安裝130
4.3.3 使用easy_install和setup進(jìn)行安裝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 正則表達(dá)式庫146
6.1.1 元字符和語法147
6.1.2 C風(fēng)格接口函數(shù)154
6.1.3 面向風(fēng)格接口函數(shù)155
6.1.4 re.Match對象155
6.2 數(shù)學(xué)庫157
6.3 時(shí)間庫159
6.3.1 時(shí)間表示法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 隨機(jī)數(shù)庫166
6.7.1 生成隨機(jī)整數(shù)和隨機(jī)實(shí)數(shù)167
6.7.2 其他形式的隨機(jī)169
6.7.3 偽隨機(jī)問題170
6.7.4 例子:計(jì)算面積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 類的定義和實(shí)例創(chuàng)建187
8.2 類的屬性189
8.3 初始化函數(shù)和銷毀函數(shù)190
8.4 實(shí)例對象的屬性192
8.4.1 類屬性和實(shí)例對象屬性的關(guān)系192
8.4.2 self在類定義中表示當(dāng)前對象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 線程的啟動(dòng)211
9.3.2 線程的退出212
9.4 threading包213
9.4.1 創(chuàng)建線程實(shí)例對象213
9.4.2 派生自己的線程類216
9.4.3 配置線程217
9.4.4 啟動(dòng)線程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 信號(hào)量threading.Semaphore228
9.5.6 事件threading.Event231
9.6 線程安全233
9.7 死鎖236
第10章 多進(jìn)程239
10.1 進(jìn)程的概念239
10.2 subprocess模塊240
10.2.1 面向過程的接口函數(shù)241
10.2.2 Popen類244
10.3 multiprocessing模塊247
10.3.1 創(chuàng)建進(jìn)程247
10.3.2 進(jìn)程的屬性249
10.3.3 進(jìn)程的接口函數(shù)253
10.3.4 進(jìn)程池258
10.3.5 進(jìn)程通信260
10.4 os模塊265
10.4.1 啟動(dòng)進(jìn)程——system()265
10.4.2 啟動(dòng)進(jìn)程并得到輸出——popen ()265
10.4.3 得到當(dāng)前進(jìn)程ID——getpid ()266
10.4.4 得到父進(jìn)程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 使用多個(gè)裝飾器281
12.6 常用裝飾器282
12.6.1 類裝飾器282
12.6.2 退出時(shí)執(zhí)行的函數(shù)284
12.6.3 單例模式284
12.6.4 執(zhí)行時(shí)間限制285
12.6.5 執(zhí)行時(shí)間標(biāo)定286
12.6.6 自動(dòng)重新運(yùn)行287
12.6.7 狀態(tài)機(jī)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 運(yùn)行方式307
14.2.2 生成測試報(bào)告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 生成測試報(bào)告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服務(wù)器363
15.4 簡單的TCP客戶端364
15.5 UDP版的echo服務(wù)器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 運(yùn)行Docker鏡像377
16.4 kubernetes庫379
第17章 Scrapy爬蟲框架388
17.1 Scrapy的安裝388
17.2 工作原理390
17.3 一個(gè)簡單的例子391
17.4 Scrapy的架構(gòu)圖393
17.5 爬蟲395
17.5.1 點(diǎn)贊統(tǒng)計(jì)例子395
17.5.2 爬蟲類396
17.6 一個(gè)完整的項(xiàng)目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 項(xiàng)目范圍內(nèi)的設(shè)置408
17.9.4 命令默認(rèn)設(shè)定409
17.9.5 全局默認(rèn)設(shè)定409
17.9.6 讀取配置411
17.9.7 常用配置412
17.10 命令行工具414
17.10.1 創(chuàng)建項(xiàng)目414
17.10.2 創(chuàng)建爬蟲415
17.10.3 列出爬蟲模板416
17.10.4 查看某個(gè)爬蟲模板417
17.10.5 基于模板創(chuàng)建爬蟲418
17.10.6 啟動(dòng)爬蟲418
17.10.7 爬蟲列表419
17.10.8 爬取指定頁面420
17.10.9 在瀏覽器中顯示頁面421
17.10.10 啟動(dòng)交互式shell422
17.10.11 runspider423
17.10.12 標(biāo)定Scrapy的性能424
17.10.13 其他命令425
17.11 爬取北京公交線路數(shù)據(jù)426
第18章 Flask Web開發(fā)框架429
18.1 Flask的安裝429
18.2 最簡單的Flask應(yīng)用430
18.3 路由430
18.3.1 動(dòng)態(tài)路由431
18.3.2 限定類型432
18.3.3 地址尾部的“/”433
18.4 運(yùn)行應(yīng)用的參數(shù)435
18.5 命令行方式運(yùn)行436
18.6 HTTP的方法437
18.7 靜態(tài)文件437
18.8 模板438
18.8.1 變量439
18.8.2 表達(dá)式440
18.8.3 子模板442
第19章 鍵值數(shù)據(jù)庫Redis444
19.1 介紹444
19.2 服務(wù)器的安裝445
19.2.1 服務(wù)器容器下載446
19.2.2 啟動(dòng)Redis容器446
19.3 Python客戶端的安裝448
19.4 元操作448
19.5 字符串?dāng)?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 訂閱多個(gè)頻道465
19.9.3 頻道使用通配符466
19.10 設(shè)置時(shí)效467
19.11 管道模式467
第20章 圖形界面應(yīng)用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)域的應(yīng)用534
21.2.5 NumPy中的傅里葉變換537
21.2.6 神經(jīng)網(wǎng)絡(luò)應(yīng)用541