Python語言具有免費(fèi)開源、簡單易學(xué)、可移植性和解釋性強(qiáng)、可擴(kuò)展可嵌入等優(yōu)點(diǎn),在國內(nèi)外都得到了廣泛的應(yīng)用。
本書基于Python 3的版本進(jìn)行講解。本書共有11章,由淺入深地講解了Python的相關(guān)知識。本書從Python的安裝開始講起,對數(shù)據(jù)類型、函數(shù)、內(nèi)置類型、集合類型、異常、生成器、文件和資源管理、單元測試等重要知識進(jìn)行了系統(tǒng)化的講解。
1.Python是一種優(yōu)秀的動(dòng)態(tài)語言,其應(yīng)用領(lǐng)域非常廣泛。Python語言具有免費(fèi)開源、簡單易學(xué)、可移植性和解釋性強(qiáng)、可擴(kuò)展\可嵌入等優(yōu)點(diǎn)。
2.本書深入地介紹了Python語言,通過閱讀本書,你可以了解Python高手常用的工具和技巧。
3.本書并不會講解所有的Python知識,只是教你快速掌握作為一名Python開發(fā)人員應(yīng)該掌握的基本工具、基本術(shù)語和函數(shù)、標(biāo)準(zhǔn)庫以及其他模塊。
本書包含如下內(nèi)容:
Python語法的核心元素
PDB調(diào)試器
字符串與集合類型
unittest軟件包
函數(shù)和模塊
面向?qū)ο缶幊?異常
文件和資源管理
生成器函數(shù)
Robert Smallshire是Sixty North的創(chuàng)始人之一。Sixty North是挪威的一家軟件咨詢和培訓(xùn)公司,該公司服務(wù)于整個(gè)歐洲,并且該公司主要使用Python工作。Robert從事高級架構(gòu)和技術(shù)管理方面的工作,曾為多家軟件公司提供能源領(lǐng)域的工具。他對尖端科學(xué)和企業(yè)級軟件有著深刻的理解,并且在這些領(lǐng)域設(shè)計(jì)、倡導(dǎo)并實(shí)現(xiàn)了高效的軟件架構(gòu),他主要使用Python、C++、C#、F#以及JavaScript。Robert經(jīng)常在技術(shù)大會、聚會和企業(yè)軟件活動(dòng)中發(fā)表演講,而且主題多種多樣,主要有軟件開發(fā)中的行為微觀經(jīng)濟(jì)學(xué)和在8位微控制器上實(shí)現(xiàn)Web服務(wù)等。他是奧斯陸Python小組的組織者,并且擁有自然科學(xué)的博士學(xué)位。
Austin Bingham也是Sixty North的創(chuàng)始人之一。Austin出生于得克薩斯州,2008年移居挪威斯塔萬格,在那里他使用C++和Python開發(fā)了業(yè)界領(lǐng)先的原油儲藏建模軟件。在此之前,他曾在美國國家儀器公司開發(fā)LabVIEW,在得克薩斯大學(xué)奧斯汀分校的應(yīng)用研究實(shí)驗(yàn)室(Applied Research Labs)為美國海軍和一些電信公司開發(fā)聲納系統(tǒng)。他是一位經(jīng)驗(yàn)豐富的主持人和教師,曾在眾多會議、軟件組織和企業(yè)內(nèi)部場所發(fā)表過演講。Austin還是開源社區(qū)的活躍成員,定期為各種Python和Emacs項(xiàng)目做出貢獻(xiàn)。他還是斯塔萬格軟件開發(fā)聯(lián)盟(Stavanger Software Developers)的創(chuàng)始人。斯塔萬格軟件開發(fā)聯(lián)盟是斯塔萬格最大、最活躍的社交軟件開發(fā)組織之一。Austin擁有得克薩斯大學(xué)奧斯汀分校計(jì)算機(jī)工程碩士學(xué)位。
第 1章 入門 1
1.1 獲取并安裝Python 3 1
1.1.1 Windows 2
1.1.2 macOS 3
1.1.3 Linux 4
1.2 啟動(dòng)Python命令行REPL 5
1.3 退出REPL 6
1.3.1 Windows 7
1.3.2 UNIX 7
1.4 代碼結(jié)構(gòu)和縮進(jìn)語法 7
1.5 Python文化 10
1.6 導(dǎo)入標(biāo)準(zhǔn)庫模塊 12
1.7 獲取幫助 12
1.7.1 使用math. facto- rial()進(jìn)行水果計(jì)數(shù) 14
1.7.2 不同的數(shù)字類型 15
1.8 標(biāo)量數(shù)據(jù)類型:整數(shù)、浮點(diǎn)數(shù)、None以及bool 16
1.8.1 int 16
1.8.2 float 18
1.8.3 None 19
1.8.4 bool 19
1.9 關(guān)系運(yùn)算符 21
1.10 控制流:if語句和while循環(huán) 22
1.10.1 條件控制流:if語句 22
1.10.2 if…else語句 23
1.10.3 if…elif…else語句 23
1.10.4 有條件的重復(fù):while語句 24
1.11 小結(jié) 27
第 2章 字符串與集合類型 29
2.1 str——不可變的Unicode碼位序列 29
2.2 禪之刻 31
2.2.1 相鄰字符串的拼接 31
2.2.2 多行字符串與換行 32
2.2.3 原始字符串 33
2.2.4 字符串也是序列 34
2.2.5 字符串方法 35
2.3 使用Unicode的字符串 37
2.4 bytes ——不可變的字節(jié)序列 37
2.4.1 字節(jié)字面量 38
2.4.2 bytes與str的相互轉(zhuǎn)換 38
2.5 list ——對象序列 41
2.6 dict類型——鍵關(guān)聯(lián)值 42
2.7 for循環(huán)——迭代 43
2.8 融會貫通 44
2.9 小結(jié) 47
第3章 模塊化 50
3.1 在一個(gè).py文件中組織代碼 50
3.1.1 從操作系統(tǒng)shell運(yùn)行Python程序 51
3.1.2 將模塊導(dǎo)入到REPL中 52
3.2 定義函數(shù) 53
3.3 將模塊組織成函數(shù) 54
3.4 Python執(zhí)行模型 57
3.5 創(chuàng)建帶有命令行參數(shù)的主函數(shù) 58
3.6 禪之刻 63
3.7 docstrings 64
3.8 注釋 67
3.9 Shebang 67
3.9.1 Linux和Mac上可執(zhí)行的Python程序 68
3.9.2 Windows上可執(zhí)行的Python程序 68
3.10 小結(jié) 69
第4章 內(nèi)置類型和對象模型 71
4.1 Python對象引用的本質(zhì) 71
4.1.1 引用重賦值 72
4.1.2 將一個(gè)引用賦值給另一個(gè)引用 72
4.1.3 探索值并使用id()獲取標(biāo)識 73
4.1.4 使用is測試標(biāo)識的相等性 74
4.1.5 無改變的變動(dòng) 74
4.1.6 引用可變對象 75
4.1.7 值相等(等值)與標(biāo)識相等 76
4.2 參數(shù)傳遞語義——通過對象引用 77
4.2.1 在函數(shù)中修改外部對象 77
4.2.2 在函數(shù)中綁定新對象 78
4.2.3 參數(shù)傳遞是引用綁定 79
4.3 Python的return語義 80
4.4 函數(shù)參數(shù)詳解 81
4.4.1 默認(rèn)參數(shù)值 81
4.4.2 關(guān)鍵字參數(shù) 82
4.4.3 何時(shí)對默認(rèn)參數(shù)進(jìn)行求值 82
4.5 Python的類型系統(tǒng) 85
4.5.1 Python中的動(dòng)態(tài)類型 85
4.5.2 Python中的強(qiáng)類型 86
4.6 變量聲明和作用域 86
4.7 作用域?qū)崙?zhàn) 87
4.7.1 全局作用域和局部作用域中的標(biāo)識名稱 88
4.7.2 global關(guān)鍵詞 89
4.8 禪之刻 90
4.9 一切皆對象 90
4.10 小結(jié) 92
第5章 探究內(nèi)置集合類型 95
5.1 tuple——不可變的對象序列 96
5.1.1 元組字面量 96
5.1.2 訪問元組中的元素 96
5.1.3 元組的長度 96
5.1.4 迭代元組 96
5.1.5 連接與重復(fù)元組 97
5.1.6 單個(gè)元素的元組 97
5.1.7 空元組 98
5.1.8 可選的括號 98
5.1.9 返回與拆包元組 98
5.1.10 通過元組拆包交換變量 99
5.2 元組構(gòu)造函數(shù) 99
5.3 字符串實(shí)戰(zhàn) 100
5.3.1 字符串的長度 100
5.3.2 連接字符串 101
5.3.3 拼接字符串 101
5.3.4 拆分字符串 102
5.4 禪之刻 102
5.4.1 分割字符串 103
5.4.2 字符串格式化 103
5.4.3 其他字符串方法 104
5.5 range——等間隔的整數(shù)集合 105
5.5.1 起始值 105
5.5.2 步長參數(shù) 106
5.5.3 不使用區(qū)間:enumerate() 107
5.6 列表實(shí)戰(zhàn) 108
5.6.1 列表的負(fù)數(shù)索引(其他序列同理) 108
5.6.2 列表切片 109
5.6.3 復(fù)制列表 112
5.6.4 淺復(fù)制 113
5.6.5 重復(fù)列表 117
5.6.6 使用index()查找列表元素 118
5.6.7 使用count()和in進(jìn)行成員資格測試 119
5.6.8 使用del按照索引刪除列表元素 119
5.6.9 使用remove()按照值刪除列表元素 120
5.6.10 向列表中插入元素 120
5.6.11 連接列表 120
5.6.12 重排列表元素 121
5.6.13 異地重排 122
5.7 字典 123
5.7.1 復(fù)制字典 124
5.7.2 更新字典 125
5.7.3 迭代字典的鍵 125
5.7.4 迭代字典的值 126
5.7.5 迭代鍵值對 127
5.7.6 字典鍵的成員資格測試 127
5.7.7 刪除字典的項(xiàng)目 128
5.7.8 字典的可變性 128
5.7.9 美化輸出 129
5.8 集——包含唯一元素的無序集合 129
5.8.1 set構(gòu)造函數(shù) 130
5.8.2 迭代集 131
5.8.3 集的成員資格測試 131
5.8.4 向集中添加元素 131
5.8.5 從集中刪除元素 132
5.8.6 復(fù)制集 133
5.8.7 集的代數(shù)運(yùn)算 133
5.8.8 并集 134
5.8.9 補(bǔ)集 134
5.9 集合協(xié)議 136
5.9.1 容器協(xié)議 137
5.9.2 大小協(xié)議 137
5.9.3 可迭代協(xié)議 137
5.9.4 序列協(xié)議 137
5.9.5 其他協(xié)議 138
5.10 小結(jié) 138
第6章 異常 140
6.1 異常與控制流程 140
6.2 處理多異常 143
6.3 程序員的錯(cuò)誤 145
6.4 空代碼塊——pass語句 146
6.5 異常對象 146
6.6 不明智的返回碼 147
6.7 重拋異常 148
6.8 異常是函數(shù)API的一部分 149
6.8.1 Python拋出的異常 150
6.8.2 捕獲異常 151
6.8.3 明確地拋出異常 152
6.9 守衛(wèi)子句 153
6.10 異常、API以及協(xié)議 155
6.10.1 IndexError 155
6.10.2 ValueError 156
6.10.3 KeyError 156
6.11 不使用守衛(wèi)子句處理TpyeError 156
6.12 Pythonic風(fēng)格——EAFP與LBYL 157
6.13 清理操作 159
6.14 禪之刻 160
6.15 平臺特定的代碼 161
6.16 小結(jié) 162
第7章 推導(dǎo)、可迭代與生成器 164
7.1 推導(dǎo) 164
7.1.1 列表推導(dǎo) 165
7.1.2 集推導(dǎo) 166
7.1.3 字典推導(dǎo) 166
7.1.4 過濾推導(dǎo) 168
7.2 禪之刻 169
7.3 迭代協(xié)議 170
7.3.1 迭代協(xié)議實(shí)例 170
7.3.2 更好的迭代實(shí)例 171
7.4 生成器函數(shù) 172
7.4.1 yield關(guān)鍵字 172
7.4.2 生成器是迭代器 173
7.4.3 生成器代碼何時(shí)執(zhí)行 174
7.4.4 管理生成器的顯式狀態(tài) 176
7.4.5 惰性與無限 178
7.5 生成器表達(dá)式 180
7.5.1 生成器對象只運(yùn)行一次 180
7.5.2 低內(nèi)存消耗的迭代器 181
7.5.3 可選的括號 181
7.5.4 在生成器表達(dá)式中使用if子句 181
7.6 內(nèi)置的迭代工具 181
7.6.1 itertools簡介 182
7.6.2 布爾序列 183
7.6.3 使用zip合并序列 183
7.6.4 使用chain()進(jìn)行序列惰性連接 185
7.7 融會貫通 185
7.8 小結(jié) 186
7.8.1 生成器 187
7.8.2 迭代工具 187
第8章 使用類定義新類型 188
8.1 定義類 189
8.2 實(shí)例方法 190
8.3 實(shí)例初始化方法 191
8.4 校驗(yàn)與不變式 192
8.5 增加第二個(gè)類 194
8.6 協(xié)同類 196
8.7 禪之刻 197
8.8 定座位 197
8.9 以實(shí)現(xiàn)細(xì)節(jié)命名方法 204
8.9.1 實(shí)現(xiàn)relocate_ passenger() 206
8.9.2 計(jì)數(shù)可用座位 208
8.10 有時(shí)你可能只需要函數(shù)對象 208
8.11 多態(tài)與鴨子類型 211
8.12 繼承與實(shí)現(xiàn)共享 215
8.12.1 一個(gè)飛機(jī)基類 215
8.12.2 繼承Aircraft 216
8.12.3 將公共功能提升到基類中 217
8.13 小結(jié) 218
第9章 文件和資源管理 221
9.1 文件 221
9.1.1 二進(jìn)制和文件模式 222
9.1.2 編碼的重要性 222
9.1.3 以寫入模式打開文件 223
9.1.4 寫入文件 224
9.1.5 關(guān)閉文件 225
9.1.6 Python之外的文件知識 225
9.1.7 讀取文件 226
9.1.8 向文件追加內(nèi)容 228
9.1.9 文件對象作為迭代器 228
9.2 上下文管理器 230
9.2.1 使用finally管理資源 232
9.2.2 with代碼塊 233
9.3 禪之刻 234
9.4 二進(jìn)制文件 235
9.4.1 BMP文件格式 235
9.4.2 位操作符 240
9.4.3 寫B(tài)MP文件 240
9.5 類文件對象 244
9.5.1 你已經(jīng)見過類文件對象 244
9.5.2 使用類文件對象 244
9.6 其他資源 245
9.7 小結(jié) 248
第 10章 使用Python庫進(jìn)行單元測試 250
10.1 測試用例 250
10.2 固件 251
10.3 斷言 251
10.4 單元測試示例:文本分析 251
10.4.1 運(yùn)行初始化測試 253
10.4.2 讓測試通過 253
10.5 用固件創(chuàng)建臨時(shí)文件 254
10.6 使用新固件 255
10.7 使用斷言測試行為 256
10.7.1 計(jì)數(shù)行數(shù) 257
10.7.2 計(jì)數(shù)字符數(shù) 258
10.8 測試異常 260
10.9 測試文件存在性 261
10.10 禪之刻 262
10.11 小結(jié) 262
第 11章 使用PDB進(jìn)行調(diào)試 264
11.1 調(diào)試命令 265
11.2 調(diào)試回文程序 266
11.2.1 使用PDB找Bug 268
11.2.2 使用抽樣找到無限循環(huán) 269
11.2.3 設(shè)置顯式的斷點(diǎn) 270
11.2.4 跳過執(zhí)行 272
11.2.5 修復(fù)BUG 274
11.3 小結(jié) 275
附錄A 虛擬環(huán)境 277
附錄B 打包與分發(fā) 280
附錄C 安裝第三方包 288
后記——?jiǎng)倓傞_始 292