對于怎樣才算是掌握了一門程序設(shè)計語言這一命題而言,專業(yè)程序員和普通的程序愛好者的視角有很大的差異,主要的不同點是專業(yè)程序員必須要全面理解程序設(shè)計、運(yùn)行背后的機(jī)理,因為理解上的偏差會導(dǎo)致程序設(shè)計或運(yùn)行出現(xiàn)各種問題。本書從程序員的視角出發(fā),講述了Python簡介、如何學(xué)習(xí)編程、Python程序的構(gòu)成、程序流程的控制、函數(shù)、模塊和包、數(shù)據(jù)類型和操作、函數(shù)式編程、文件和文件系統(tǒng)操作、異常處理、面向?qū)ο缶幊獭⒃幊、面向(qū)ο笤O(shè)計的原則、正則表達(dá)式、調(diào)試和測試、異步程序等。本書為抽象的知識點提供了豐富的代碼實例,還附帶了完善的微課視頻,采用線上線下結(jié)合的方式,讓讀者學(xué)會一門真正有用、能用的程序設(shè)計語言。 本書既可作為高等院校計算機(jī)類、管理類、統(tǒng)計類等專業(yè)的Python語言課程的教材,也可以供Python語言自學(xué)者或培訓(xùn)機(jī)構(gòu)使用。
陳洪濤,浙江海洋大學(xué)副教授,主編浙江省"十三五”新形態(tài)教材《Python編程》《UI設(shè)計基礎(chǔ)教程》;曾獲得浙江海洋大學(xué)首屆"超星杯”移動教學(xué)大賽一等獎(2019年)、2019年浙江省本科院校"互聯(lián)網(wǎng)+教學(xué)”優(yōu)秀案例和示范課堂、2019年本科高校省級"三類”一流課程。主持項目:1.浙江省“十三五”新形態(tài)教材《Python編程》2.浙江省科技廳:跨海大橋智能主動防撞預(yù)警系統(tǒng)的應(yīng)用研究(2010C31017)3.橫向臨港集裝箱運(yùn)輸企業(yè)可視化運(yùn)輸監(jiān)控系統(tǒng)研發(fā)(技術(shù)開發(fā)合同編號2012-09)4.浙江省教育廳:基于粗糙集的增量學(xué)習(xí)算法研究及應(yīng)用(Y200804747)
第1章 Python簡介 1
1.1 Python的由來 1
1.2 Python的特點 1
1.3 Python解釋器 2
1.4 Python程序的集成開發(fā)環(huán)境 3
1.4.1 Anaconda安裝 3
1.4.2 Anaconda Navigator 5
1.4.3 Spyder的使用 6
1.4.4 Jupyter Notebook的使用 7
1.5 在命令行中使用Conda 9
1.5.1 將安裝包的源設(shè)置為國內(nèi)的鏡像站 9
1.5.2 更新Conda的版本 10
1.5.3 和環(huán)境相關(guān)的操作方法 10
1.5.4 用Conda管理包 12
1.5.5 進(jìn)一步了解Conda 13
1.6 本章習(xí)題 13
第2章 如何學(xué)習(xí)編程 14
2.1 編程的困難來自哪里 14
2.2 某種語言是否優(yōu)于另一種語言 16
2.3 計算思維在編程中起著重要的作用 18
2.4 如何描述計算機(jī)上運(yùn)行的算法 20
2.5 本章習(xí)題 22
第3章 Python程序的構(gòu)成 23
3.1 Python程序的構(gòu)成要素 23
3.2 Python的標(biāo)識符和名稱綁定 27
3.2.1 標(biāo)識符 27
3.2.2 變量類型和字面量 28
3.2.3 名稱綁定 30
3.3 Python程序的運(yùn)算符和表達(dá)式 31
3.3.1 賦值運(yùn)算符和表達(dá)式 31
3.3.2 算術(shù)運(yùn)算符和表達(dá)式 32
3.3.3 比較運(yùn)算符和關(guān)系表達(dá)式 33
3.3.4 邏輯運(yùn)算符和表達(dá)式 34
3.3.5 成員運(yùn)算符和表達(dá)式 36
3.3.6 位運(yùn)算符和表達(dá)式 37
3.3.7 對象標(biāo)識運(yùn)算符和表達(dá)式 38
3.4 運(yùn)算符優(yōu)先級 38
3.5 輸出格式的控制 39
3.6 一些有用的方法 41
3.7 本章習(xí)題 41
第4章 程序流程的控制 43
4.1 程序流程的三種基本結(jié)構(gòu) 43
4.2 選擇語句 44
4.2.1 單分支 44
4.2.2 雙分支 45
4.2.3 多分支 45
4.2.4 選擇語句嵌套 46
4.2.5 復(fù)合結(jié)構(gòu)的語句縮進(jìn) 47
4.3 循環(huán)語句 48
4.3.1 如何編寫循環(huán)程序 48
4.3.2 循環(huán)的中斷 51
4.4 空語句 52
4.5 本章習(xí)題 52
第5章 函數(shù) 54
5.1 函數(shù)的定義和調(diào)用 54
5.2 函數(shù)的參數(shù)傳遞 56
5.2.1 通過內(nèi)存變化了解參數(shù)傳遞 56
5.2.2 參數(shù)傳遞中的若干情形 59
5.3 遞歸函數(shù) 62
5.4 變量的作用范圍 65
5.5 匿名函數(shù) 67
5.6 函數(shù)標(biāo)注和變量標(biāo)注 68
5.7 文檔字符串 69
5.8 內(nèi)置函數(shù) 70
5.9 本章習(xí)題 71
第6章 模塊和包 73
6.1 模塊和包的作用 73
6.2 導(dǎo)入和使用標(biāo)準(zhǔn)模塊 73
6.2.1 Python如何找到標(biāo)準(zhǔn)模塊文件 74
6.2.2 模塊的加載 75
6.3 名稱空間和名稱作用域 76
6.4 自定義模塊 78
6.5 包 79
6.6 本章習(xí)題 81
第7章 數(shù)據(jù)類型和操作 83
7.1 Python的數(shù)據(jù)類型 83
7.2 容器類型對象的創(chuàng)建 84
7.2.1 序列類型的創(chuàng)建 84
7.2.2 無序類型的創(chuàng)建 88
7.3 對序列類型對象的操作 89
7.3.1 序列類型對象元素的引用 89
7.3.2 序列類型對象的切片 90
7.3.3 適用序列的常見運(yùn)算符 93
7.3.4 字符串的編碼和解碼 93
7.3.5 字符串和數(shù)值的轉(zhuǎn)換 94
7.3.6 與序列類型對象相關(guān)的函數(shù) 95
7.3.7 序列類型對象的循環(huán)遍歷 98
7.4 無序類型容器對象的操作 99
7.4.1 與無序類型容器相關(guān)的函數(shù) 99
7.4.2 無序類型對象的循環(huán)遍歷 102
7.5 淺拷貝和深拷貝 102
7.6 可迭代和迭代器 104
7.6.1 什么是可迭代和迭代器 104
7.6.2 推導(dǎo)式 106
7.6.3 生成器表達(dá)式 107
7.6.4 生成器 108
7.7 拆包操作符 109
7.8 迭代對象使得代碼更簡潔 110
7.9 本章習(xí)題 110
第8章 函數(shù)式編程 113
8.1 函數(shù)式編程的含義 113
8.2 純函數(shù) 114
8.2.1 純函數(shù)的反例 114
8.2.2 純函數(shù)的正例 114
8.3 高階函數(shù) 115
8.4 閉包 116
8.4.1 閉包的含義 116
8.4.2 閉包的應(yīng)用 117
8.4.3 閉包探究 118
8.5 尾遞歸 118
8.6 Python內(nèi)置的高階函數(shù) 120
8.7 本章習(xí)題 122
第9章 文件和文件系統(tǒng)操作 123
9.1 文件和文件系統(tǒng) 123
9.1.1 不同操作系統(tǒng)的一些差異 123
9.1.2 絕對路徑和相對路徑 124
9.2 文件操作 125
9.2.1 打開文件 125
9.2.2 關(guān)閉文件 127
9.2.3 文件操作的常用函數(shù) 128
9.2.4 文本文件訪問 128
9.2.5 二進(jìn)制文件訪問 133
9.3 目錄操作 139
9.4 本章習(xí)題 141
第10章 異常處理 142
10.1 程序錯誤 142
10.2 異常捕獲 143
10.3 異常的層次關(guān)系 146
10.4 拋出異常和異常的調(diào)用棧追溯 147
10.4.1 拋出異常 147
10.4.2 異常的調(diào)用棧追溯 148
10.5 用戶自定義異常類 149
10.6 本章習(xí)題 151
第11章 面向?qū)ο缶幊?152
11.1 面向?qū)ο蟮南嚓P(guān)概念 152
11.2 類的定義示例 155
11.3 實例生成和成員訪問的代碼示例 157
11.4 類和對象在內(nèi)存中的存在 158
11.5 類實例的生成 159
11.6 類實例的銷毀 162
11.7 專用方法 163
11.8 屬性和方法的可訪問性 165
11.9 類方法和靜態(tài)方法 167
11.10 其他常用裝飾器描述符 171
11.11 運(yùn)算符重載 172
11.12 繼承 173
11.12.1 繼承實現(xiàn)擴(kuò)展和多態(tài) 173
11.12.2 多繼承 175
11.13 抽象類 176
11.13.1 通過繼承實現(xiàn)抽象類 176
11.13.2 通過注冊實現(xiàn)抽象類 177
11.13.3 內(nèi)置抽象基類 179
11.14 如何實現(xiàn)裝飾器 179
11.14.1 實現(xiàn)用戶自定義的裝飾器 179
11.14.2 實現(xiàn)日志輸出的裝飾器 181
11.15 本章習(xí)題 184
第12章 元編程 186
12.1 什么是元類 186
12.1.1 type是內(nèi)置函數(shù)還是內(nèi)置類 186
12.1.2 元類和類的關(guān)系 187
12.2 用元類創(chuàng)建類 189
12.3 元編程示例 193
12.4 本章習(xí)題 195
第13章 面向?qū)ο笤O(shè)計的原則 197
13.1 面向?qū)ο笤O(shè)計的原則簡介 197
13.2 設(shè)計原則的應(yīng)用 198
13.2.1 起步 198
13.2.2 基于單一職責(zé)的第一次改進(jìn) 199
13.2.3 如何做到擴(kuò)充時不需要修改 200
13.2.4 什么是Liskov替換 202
13.2.5 為不同的用戶提供剛好夠用的接口 203
13.3 Tkinter的簡單介紹 207
13.3.1 圖形用戶界面的基本元素 207
13.3.2 簡單的窗口程序 207
13.3.3 用類重構(gòu)代碼 210
13.4 面向?qū)ο蟮脑O(shè)計原則實例 211
13.4.1 構(gòu)建概念到實現(xiàn)的層次關(guān)系 212
13.4.2 構(gòu)建自定義的Canvas類 214
13.4.3 用戶界面 217
13.5 本章習(xí)題 217
第14章 正則表達(dá)式 218
14.1 什么是正則表達(dá)式 218
14.2 正則表達(dá)式的主要用途 218
14.2.1 在字符串中查找子串 219
14.2.2 在文本中查找所有字符串 220
14.2.3 分隔字符串 220
14.2.4 替換一部分字符串 221
14.3 把正則表達(dá)式轉(zhuǎn)成模式對象 221
14.4 正則表達(dá)式的語法規(guī)則 221
14.4.1 元字符 221
14.4.2 轉(zhuǎn)義字符 222
14.5 正則表達(dá)式實例 223
14.6 可選標(biāo)記參數(shù)的設(shè)置 226
14.7 分組擴(kuò)展 228
14.8 本章習(xí)題 230
第15章 調(diào)試和測試 231
15.1 調(diào)試和除錯 231
15.2 測試 232
15.2.1 doctest單元測試模塊的使用方法 233
15.2.2 unittest單元測試模塊的使用方法 236
15.3 本章習(xí)題 243
第16章 異步程序 244
16.1 進(jìn)程和線程 244
16.2 異步程序和同步程序 246
16.3 并行與并發(fā) 246
16.4 多線程 247
16.4.1 主線程 247
16.4.2 創(chuàng)建和運(yùn)行線程 248
16.4.3 守護(hù)線程 250
16.4.4 線程池 254
16.4.5 使用鎖同步 258
16.4.6 可重入鎖 261
16.4.7 生產(chǎn)者和消費者 262
16.4.8 其他同步對象 267
16.5 多進(jìn)程 267
16.5.1 創(chuàng)建和運(yùn)行多進(jìn)程 267
16.5.2 進(jìn)程間數(shù)據(jù)共享 269
16.5.3 進(jìn)程間通信 272
16.5.4 進(jìn)程同步 275
16.5.5 進(jìn)程池 276
16.6 異步I/O 278
16.6.1 異步程序的調(diào)度方式 278
16.6.2 協(xié)程 279
16.6.3 可等待對象 282
16.6.4 讓事件循環(huán)調(diào)度多個協(xié)程 282
16.6.5 多協(xié)程實現(xiàn)有限狀態(tài)機(jī) 284
16.6.6 多協(xié)程共享數(shù)據(jù) 287
16.6.7 異步HTTP 289
16.7 本章習(xí)題 292