這是一本Python入門書,本書的特色之一是在介紹Python編程的基礎(chǔ)知識之后,通過具體編程范例,分不同的主題來闡釋如何用Python語言高效編程,在幫助讀者夯實(shí)基礎(chǔ)的同時(shí)找到最佳解決方案,達(dá)到學(xué)以致用的目的。
本書內(nèi)容由淺入深,從理論到實(shí)踐,首先介紹Python編程的基本知識和編程范例,然后介紹如何進(jìn)行性能優(yōu)化、有效調(diào)試以及如何控制程序的流程。此外,本書還講解了Python中的加密服務(wù)和安全令牌等知識。通過學(xué)習(xí)本書,讀者將對Python語言有一定的了解。本書能夠幫助讀者掌握如何編寫程序、構(gòu)建網(wǎng)站以及利用Python著名的數(shù)據(jù)科學(xué)庫來處理數(shù)據(jù)等內(nèi)容。本書涵蓋各種類型的應(yīng)用程序,可幫助讀者根據(jù)所學(xué)的知識解決真實(shí)世界中的問題。
Python 編程入門的精煉指南,用python 3.7 進(jìn)行數(shù)據(jù)科學(xué)和web開發(fā);
提供本書源代碼和書中彩圖文件下載。
Python 是一種極其靈活和強(qiáng)大的編程語言,適用于多個領(lǐng)域。本書并沒有對 Python 的基礎(chǔ)知識進(jìn)行過多講解,而是對其實(shí)用性進(jìn)行了透徹的介紹,從而幫助讀者熟悉并使用該語言。
你將首先了解 Python 的基礎(chǔ)知識,為接下來的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ),并學(xué)習(xí)Python 編程基礎(chǔ),即如何操控 Python以實(shí)現(xiàn)想要的效果。你還將探索不同的編程用法,找到解決特定問題的理想方法,理解如何實(shí)現(xiàn)程序性能優(yōu)化,學(xué)習(xí)有效調(diào)試、控制程序的執(zhí)行流,并使用一種交換格式對數(shù)據(jù)進(jìn)行交換。此外,你還將學(xué)習(xí) Python 的加密服務(wù),理解安全標(biāo)記的概念。
本書將幫助你透徹理解 Python 語言,學(xué)習(xí)如何編寫程序、創(chuàng)建網(wǎng)站,并利用數(shù)據(jù)科學(xué)庫對數(shù)據(jù)進(jìn)行操作。本書還配備了一些實(shí)例,涵蓋了各種不同的應(yīng)用類型,并在全書最后引導(dǎo)你根據(jù)所學(xué)知識創(chuàng)建一個實(shí)際項(xiàng)目。
主要內(nèi)容:
獲取 Python,并在 Windows、macOS 和 Linux 上安裝運(yùn)行;
使用數(shù)據(jù)結(jié)構(gòu)和控制流,探索編程的基本概念;編寫優(yōu)雅、可復(fù)用、高效的代碼;
理解什么時(shí)候適合使用過程式編程,什么時(shí)候適合使用面向?qū)ο缶幊蹋∣OP);
學(xué)習(xí)并發(fā)執(zhí)行的基礎(chǔ)知識;
通過編寫測試,創(chuàng)建安全可靠的軟件;
用 Django 創(chuàng)建簡單的網(wǎng)站;
提取、清理和操縱數(shù)據(jù)。
法布里奇奧·羅馬諾(Fabrizio Romano)出生于意大利,帕多瓦大學(xué)計(jì)算機(jī)科學(xué)系碩士。他是一位項(xiàng)目經(jīng)理,同時(shí)也是一位教師,并且是CNHC的成員,現(xiàn)在就職于Sohonet,擔(dān)任首席工程師和項(xiàng)目領(lǐng)導(dǎo)人。
第 1章 Python概述 1
1.1 編程預(yù)備知識 2
1.2 走近Python 4
1.3 Python的優(yōu)點(diǎn) 5
1.3.1 可移植性 5
1.3.2 一致性 5
1.3.3 提高開發(fā)人員的效率 5
1.3.4 廣泛的程序庫 5
1.3.5 軟件質(zhì)量高 6
1.3.6 軟件集成度高 6
1.3.7 滿足感和樂趣 6
1.4 Python的缺點(diǎn) 6
1.5 當(dāng)前的Python用戶 7
1.6 設(shè)置環(huán)境 7
1.7 安裝Python 8
1.7.1 安裝Python解釋器 9
1.7.2 關(guān)于virtualenv 10
1.7.3 第 一個虛擬環(huán)境 11
1.7.4 控制臺 14
1.8 運(yùn)行Python程序 14
1.8.1 運(yùn)行Python腳本 14
1.8.2 在交互性shell中運(yùn)行Python 15
1.8.3 以服務(wù)的形式運(yùn)行Python 16
1.8.4 以GUI應(yīng)用程序的形式運(yùn)行Python 16
1.9 Python代碼的組織方式 17
1.10 Python的執(zhí)行模型 21
1.10.1 名稱和名字空間 21
1.10.2 作用域 23
1.10.3 對象和類 26
1.11 編寫良好代碼的指導(dǎo)原則 28
1.12 Python的文化 29
1.13 關(guān)于IDE的說明 31
1.14 總結(jié) 31
第 2章 內(nèi)置的數(shù)據(jù)類型 33
2.1 一切都是對象 34
2.2 可變對象與不可變對象 35
2.3 數(shù)值 36
2.3.1 整數(shù) 36
2.3.2 布爾值 38
2.3.3 實(shí)數(shù) 39
2.3.4 復(fù)數(shù) 40
2.3.5 分?jǐn)?shù)和小數(shù) 40
2.4 不可變序列 42
2.4.1 字符串和字節(jié) 42
2.4.2 元組 45
2.5 可變序列 46
2.5.1 列表 47
2.5.2 字節(jié)數(shù)組 50
2.6 集合類型 51
2.7 映射類型—字典 53
2.8 collections模塊 57
2.8.1 namedtuple 57
2.8.2 defaultdict 59
2.8.3 ChainMap 60
2.9 枚舉 61
2.10 注意事項(xiàng) 62
2.10.1 小值緩存 62
2.10.2 如何選擇數(shù)據(jù)結(jié)構(gòu) 62
2.10.3 關(guān)于索引和截取 64
2.10.4 關(guān)于名稱 65
2.11 總結(jié) 66
第3章 迭代和決策 67
3.1 條件編程 68
3.1.1 一種特化的else-elif 69
3.1.2 三元操作符 71
3.2 循環(huán) 72
3.2.1 for循環(huán) 72
3.2.2 迭代器和可迭代對象 74
3.2.3 對多個序列進(jìn)行迭代 75
3.2.4 while循環(huán) 77
3.2.5 continue語句和break語句 80
3.2.6 一種特殊的else子句 82
3.3 綜合應(yīng)用 83
3.3.1 質(zhì)數(shù)生成器 83
3.3.2 應(yīng)用折扣 85
3.4 itertools模塊 88
3.4.1 無限迭代器 89
3.4.2 終止于最短輸入序列的迭代器 89
3.4.3 組合迭代器 90
3.5 總結(jié) 91
第4章 函數(shù),代碼的基本構(gòu)件 92
4.1 函數(shù)的優(yōu)點(diǎn) 93
4.1.1 減少代碼的重復(fù) 94
4.1.2 分割復(fù)雜任務(wù) 94
4.1.3 隱藏實(shí)現(xiàn)細(xì)節(jié) 95
4.1.4 提高可讀性 95
4.1.5 提高可追蹤性 96
4.2 作用域和名稱解析 97
4.3 輸入?yún)?shù) 100
4.3.1 參數(shù)傳遞 100
4.3.2 對參數(shù)名稱的賦值并不會影響調(diào)用者 101
4.3.3 修改可變對象會影響調(diào)用者 102
4.3.4 指定輸入?yún)?shù) 103
4.4 返回值 111
4.5 一些實(shí)用的提示 113
4.6 遞歸函數(shù) 114
4.7 匿名函數(shù) 115
4.8 函數(shù)的屬性 116
4.9 內(nèi)置函數(shù) 117
4.10 最后一個例子 118
4.11 代碼的文檔 119
4.12 導(dǎo)入對象 120
4.13 總結(jié) 122
第5章 節(jié)省時(shí)間和內(nèi)存 123
5.1 map、zip和filter函數(shù) 125
5.1.1 map函數(shù) 125
5.1.2 zip函數(shù) 128
5.1.3 filter函數(shù) 129
5.2 解析 129
5.2.1 嵌套的解析 131
5.2.2 在解析中應(yīng)用過濾 131
5.2.3 dict解析 133
5.2.4 set解析 134
5.3 生成器 134
5.3.1 生成器函數(shù) 135
5.3.2 next工作方式 138
5.3.3 yield from表達(dá)式 141
5.3.4 生成器表達(dá)式 142
5.4 性能上的考慮 145
5.5 不要過度使用解析和生成器表達(dá)式 147
5.6 名稱局部化 151
5.7 內(nèi)置的生成行為 152
5.8 最后一個例子 153
5.9 總結(jié) 155
第6章 面向?qū)ο缶幊、裝飾器和迭代器 156
6.1 裝飾器 156
6.2 面向?qū)ο缶幊蹋∣OP) 164
6.2.1 Python中最簡單的類 164
6.2.2 類和對象的名字空間 165
6.2.3 屬性屏蔽 166
6.2.4 self變量 167
6.2.5 實(shí)例的初始化 168
6.2.6 OOP與代碼復(fù)用有關(guān) 169
6.2.7 訪問基類 174
6.2.8 多重繼承 176
6.2.9 靜態(tài)方法和類方法 180
6.2.10 私有屬性和名稱改寫 184
6.2.11 property裝飾器 186
6.2.12 操作符重載 188
6.2.13 多態(tài)—簡單說明 188
6.2.14 數(shù)據(jù)類 189
6.3 編寫自定義的迭代器 190
6.4 總結(jié) 191
第7章 文件和數(shù)據(jù)持久化 192
7.1 操作文件和目錄 193
7.1.1 打開文件 193
7.1.2 讀取和寫入文件 195
7.1.3 檢查文件和目錄是否存在 197
7.1.4 對文件和目錄進(jìn)行操作 197
7.1.5 臨時(shí)文件和臨時(shí)目錄 200
7.1.6 檢查目錄的內(nèi)容 201
7.1.7 文件和目錄的壓縮 202
7.2 數(shù)據(jù)交換格式 203
7.3 IO、流和請求 210
7.3.1 使用內(nèi)存中的流 210
7.3.2 執(zhí)行HTTP請求 211
7.4 對磁盤上的數(shù)據(jù)進(jìn)行持久化 214
7.4.1 使用pickle模塊對數(shù)據(jù)進(jìn)行序列化 214
7.4.2 用shelve保存數(shù)據(jù) 216
7.4.3 把數(shù)據(jù)保存到數(shù)據(jù)庫 217
7.5 總結(jié) 223
第8章 測試、性能分析和異常處理 224
8.1 對應(yīng)用程序進(jìn)行測試 225
8.1.1 測試的結(jié)構(gòu) 227
8.1.2 編寫測試的指導(dǎo)原則 228
8.1.3 單元測試 229
8.1.4 測試一個CSV生成器 231
8.2 測試驅(qū)動的開發(fā) 244
8.3 異常 247
8.4 對Python進(jìn)行性能分析 251
8.5 總結(jié) 255
第9章 加密與標(biāo)記 256
9.1 加密的需要 256
9.2 hashlib模塊 257
9.3 secrets模塊 260
9.3.1 隨機(jī)數(shù) 260
9.3.2 標(biāo)記的生成 260
9.3.3 摘要的比較 262
9.4 HMAC 263
9.5 JSON Web標(biāo)記 263
9.5.1 已注冊的訴求 265
9.5.2 使用非對稱(公鑰)算法 268
9.6 總結(jié) 270
第 10章 并發(fā)執(zhí)行 271
10.1 并發(fā)與平行的比較 272
10.2 線程和進(jìn)程 272
10.2.1 線程的簡要剖析 272
10.2.2 全局解釋器鎖 274
10.2.3 競爭條件和死鎖 275
10.2.4 進(jìn)程的簡要剖析 277
10.2.5 多線程與多進(jìn)程之間的區(qū)別 278
10.3 Python中的并發(fā)執(zhí)行 279
10.3.1 啟動線程 279
10.3.2 啟動進(jìn)程 281
10.3.3 終止線程和進(jìn)程 282
10.3.4 生成多個線程 283
10.3.5 解決競爭條件 284
10.3.6 線程的局部數(shù)據(jù) 286
10.3.7 線程和進(jìn)程的通信 288
10.3.8 線程池和進(jìn)程池 291
10.3.9 使用進(jìn)程為函數(shù)添加到期時(shí)間 294
10.4 案例 295
10.4.1 案例1:并發(fā)的mergesort 296
10.4.2 案例2:批量解答數(shù)獨(dú)的程序 300
10.4.3 案例3:下載隨機(jī)圖像 309
10.5 總結(jié) 314
第 11章 調(diào)試和故障排除 315
11.1 調(diào)試技巧 316
11.1.1 用print進(jìn)行調(diào)試 316
11.1.2 用自定義函數(shù)進(jìn)行調(diào)試 317
11.1.3 檢查回溯 319
11.1.4 使用Python調(diào)試器 321
11.1.5 檢查日志文件 323
11.1.6 其他技巧 326
11.1.7 去哪里尋找相關(guān)的信息 327
11.2 故障排除指南 327
11.2.1 使用控制臺編輯器 327
11.2.2 選擇合適的地方放置調(diào)試斷點(diǎn) 327
11.2.3 使用測試進(jìn)行調(diào)試 328
11.2.4 監(jiān)視 328
11.3 總結(jié) 328
第 12章 GUI和腳本 330
12.1 第 1種方法:腳本 332
12.1.1 導(dǎo)入部分 332
12.1.2 解析參數(shù) 333
12.1.3 業(yè)務(wù)邏輯 335
12.2 第 2種方法:GUI應(yīng)用程序 339
12.2.1 導(dǎo)入部分 341
12.2.2 布局邏輯 341
12.2.3 業(yè)務(wù)邏輯 345
12.2.4 改進(jìn)GUI應(yīng)用程序 351
12.3 進(jìn)一步了解GUI應(yīng)用程序 352
12.3.1 turtle模塊 352
12.3.2 wxPython、PyQt和PyGTK 353
12.3.3 最小驚訝原則 353
12.3.4 線程方面的考慮 353
12.4 總結(jié) 354
第 13章 數(shù)據(jù)科學(xué) 355
13.1 IPython和Jupyter Notebook 356
13.1.1 安裝必要的程序庫 358
13.1.2 使用Anaconda 358
13.1.3 啟動Notebook 359
13.2 處理數(shù)據(jù) 359
13.2.1 設(shè)置Notebook 360
13.2.2 準(zhǔn)備數(shù)據(jù) 360
13.2.3 整理數(shù)據(jù) 364
13.2.4 創(chuàng)建DataFrame 366
13.2.5 把DataFrame保存到文件 375
13.2.6 顯示結(jié)果 375
13.3 數(shù)據(jù)科學(xué)和Python的更多工具 381
13.4 總結(jié) 383
第 14章 Web開發(fā) 384
14.1 Web 384
14.2 Web的工作方式 385
14.3 Django Web框架 385
14.3.1 Django的設(shè)計(jì)原則 386
14.3.2 Django的URL分配器 388
14.4 一個regex網(wǎng)站 389
14.4.1 安裝Django 389
14.4.2 添加Entry模型 392
14.4.3 對管理員面板進(jìn)行自定義 393
14.4.4 創(chuàng)建表單 396
14.4.5 編寫視圖 397
14.4.6 連接URL和視圖 401
14.4.7 編寫模板 403
14.5 Web開發(fā)的未來 409
14.5.1 編寫Flask視圖 409
14.5.2 用Falcon創(chuàng)建JSON語錄服務(wù)器 411
14.6 總結(jié) 413
14.7 再見 414