本書(shū)旨在打造一本彰顯Python的亮點(diǎn)、有深度地講清其概念的教材。全書(shū)共6章。第1章為Python編程生態(tài),在為全書(shū)學(xué)習(xí)奠定基礎(chǔ)的同時(shí),重點(diǎn)是要在讀者心目中筑牢Python以對(duì)象為程序主角的一切皆對(duì)象思想。第2~4章分別介紹Python結(jié)構(gòu)化編程基礎(chǔ)、函數(shù)式編程,以及基于類(lèi)的編程。第5章為Python容器操作,介紹Python面向應(yīng)用的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)容器。第6章為Python開(kāi)發(fā)舉例,通過(guò)數(shù)據(jù)庫(kù)訪問(wèn)、數(shù)據(jù)處理、WWW訪問(wèn)和GUI編程,介紹本書(shū)倡導(dǎo)的應(yīng)用開(kāi)發(fā)重在熟悉領(lǐng)域知識(shí)的思想。本書(shū)結(jié)構(gòu)合理、概念精準(zhǔn),并提供了一些有助于教學(xué)的機(jī)制,例如,習(xí)題按大節(jié)組織,以便針對(duì)性更強(qiáng);用二維碼擴(kuò)展知識(shí)范圍;每篇有一張思維導(dǎo)圖等,供學(xué)習(xí)者學(xué)前了解本篇知識(shí)概況,學(xué)后進(jìn)行知識(shí)與思路整理。還提供了PPT和教學(xué)參考大綱。本書(shū)適合高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)、電子信息工程、自動(dòng)化及通信工程等專業(yè)師生選用,也可供想學(xué)習(xí)Python編程語(yǔ)言的讀者自學(xué)使用。
計(jì)算機(jī)是人類(lèi)思維的輔助工具,并依靠程序設(shè)計(jì)語(yǔ)言來(lái)與人溝通、交流。隨著計(jì)算機(jī)的發(fā)展和應(yīng)用的深化,程序設(shè)計(jì)語(yǔ)言在競(jìng)爭(zhēng)中不斷發(fā)展,推陳出新,呈現(xiàn)出琳瑯滿目的景象。據(jù)統(tǒng)計(jì),迄今已經(jīng)開(kāi)發(fā)出了超過(guò)2500種的高級(jí)程序設(shè)計(jì)語(yǔ)言。曾幾何時(shí),在長(zhǎng)期的明爭(zhēng)暗斗中,在TIOBE的擂臺(tái)上,C、Java、C 一直壟斷著前三霸的地位。許多程序設(shè)計(jì)語(yǔ)言也曾經(jīng)想沖擊這個(gè)位置,卻一直無(wú)功而返。但這一局面卻在近年被荷蘭的吉多·范羅蘇姆(Guido van Rossum)于1989年圣誕節(jié)假期為打發(fā)無(wú)聊的時(shí)光而創(chuàng)作出來(lái)的Python打破了。如圖0.1所示,從2018年開(kāi)始,Python就疾步攀升,并從2022年起便將TIOBE擂臺(tái)上首席霸主的金腰帶牢牢握在手中。
Python的成功并非偶然。它之所以能得到廣泛的青睞,是因?yàn)榇蟊姳凰奶攸c(diǎn)所吸引。但是,不同的人對(duì)同一件事物會(huì)有不同的感覺(jué)。下面是本書(shū)作者的芻蕘之見(jiàn)。
1.Python深厚的一切皆對(duì)象
現(xiàn)在,多數(shù)高級(jí)程序設(shè)計(jì)語(yǔ)言都祭起了一切皆對(duì)象的大旗。Python雖也如此,但比其他語(yǔ)言覆蓋面要寬泛得多,寓意要深刻得多。一個(gè)突出的特點(diǎn)是,在Python程序中以對(duì)象作為主角,具有ID、type、應(yīng)用屬性和引用計(jì)數(shù)器;變量只作為角色的名字。這樣就增加了內(nèi)存管理的自動(dòng)化程度,降低了內(nèi)存泄漏和內(nèi)存溢出的概率,有助于提高程序的穩(wěn)定性、安全性。
2.基于不變性原則和第一類(lèi)對(duì)象的函數(shù)式編程
Python基于類(lèi)型將大部分?jǐn)?shù)據(jù)對(duì)象定義為不可變類(lèi)型,并配合有效的作用域法則,大大提高了程序的安全性,有力地支持了函數(shù)式編程。同時(shí)將函數(shù)定義為第一類(lèi)對(duì)象,使函數(shù)既可以作為參數(shù),也可以作為返回值。在這兩大機(jī)制支持下的Python函數(shù)式編程,彰顯出極有特色的模式,將程序代碼轉(zhuǎn)換成數(shù)學(xué)推演形式的同時(shí),做到了邏輯嚴(yán)密,易于理解,方便管理,便于并發(fā),可以熱升級(jí)。
3.具有多層抽象和多樣靈活性的面向?qū)ο缶幊谭妒?br />封裝、繼承、多態(tài)是面向?qū)ο缶幊痰娜蠡咎匦。Python除了支持這三大基本特性外,還通過(guò)多層抽象,以及魔法方法和魔法屬性等多種靈活性機(jī)制,將面向?qū)ο蟮某橄蠛投鄳B(tài)發(fā)揮得淋漓盡致。
4.良好的程序開(kāi)發(fā)生態(tài)
Python提供了豐富的程序開(kāi)發(fā)資源,并將這些資源分為三級(jí):
① 可以直接使用的內(nèi)置資源(常量、屬性、函數(shù)和方法)。
② 需導(dǎo)入才可使用的標(biāo)準(zhǔn)庫(kù)模塊。
③ 需安裝、導(dǎo)入才可使用的第三方擴(kuò)展庫(kù)模塊。
本書(shū)旨在彰顯Python的亮點(diǎn),講清它的本質(zhì)。為此,將有關(guān)內(nèi)容組織成如下六章。
第1章以Python編程生態(tài)為題,介紹Python的一些基礎(chǔ)知識(shí),為后續(xù)學(xué)習(xí)打下基礎(chǔ)。其中最為重要的是筑牢Python程序設(shè)計(jì)以對(duì)象為主角的意識(shí)。Python最著名的標(biāo)簽是一切皆對(duì)象。這個(gè)標(biāo)簽別的程序設(shè)計(jì)語(yǔ)言也用過(guò),但是,那里的一切皆對(duì)象的背后是變量唱主角。而Python的一切皆對(duì)象的背后是對(duì)象唱主角。
第2、3、4三章,分別介紹 Python結(jié)構(gòu)化編程基礎(chǔ)、Python函數(shù)式編程和 Python基于類(lèi)的編程。通過(guò)這三章的學(xué)習(xí),才能真正理解為什么說(shuō)Python是一種多范型的程序設(shè)計(jì)語(yǔ)言。
第5章以Python容器操作為題,介紹Python具有特色的、面向應(yīng)用的基本數(shù)據(jù)結(jié)構(gòu)和應(yīng)用。著名計(jì)算機(jī)科學(xué)家沃斯有一本名著《算法 數(shù)據(jù)結(jié)構(gòu)=程序》,他把數(shù)據(jù)結(jié)構(gòu)與算法并列為程序的兩大核心元素,說(shuō)明了數(shù)據(jù)結(jié)構(gòu)的重要性。這個(gè)思想對(duì)程序開(kāi)發(fā),乃至整個(gè)計(jì)算機(jī)科學(xué)產(chǎn)生了極大影響。Python提供的字符串、元組、列表、字典、集合和文件,不僅具有廣泛的實(shí)際應(yīng)用價(jià)值,還進(jìn)一步構(gòu)造出現(xiàn)代數(shù)據(jù)結(jié)構(gòu)的基本構(gòu)件和工具。它們各自提供了不同的特性和用途,可以幫助開(kāi)發(fā)者高效地管理和操作數(shù)據(jù)。
第6章通過(guò)數(shù)據(jù)庫(kù)訪問(wèn)、數(shù)據(jù)處理、WWW訪問(wèn)和GUI編程4個(gè)基本應(yīng)用方向,介紹基于庫(kù)(標(biāo)準(zhǔn)庫(kù)或擴(kuò)展庫(kù))進(jìn)行軟件開(kāi)發(fā)的基本思路。
為向?qū)W習(xí)者提供更好的學(xué)習(xí)環(huán)境,本書(shū)除了在正文中準(zhǔn)確地介紹有關(guān)概念、方法,選擇經(jīng)典例題外,還配有習(xí)題,供學(xué)習(xí)者對(duì)學(xué)習(xí)成果進(jìn)行測(cè)試。習(xí)題的題型有選擇題、判斷題、填空題、簡(jiǎn)答題、代碼分析題、實(shí)踐題等。
此外,本書(shū)為了兼顧教學(xué)課時(shí)安排,將一部分章節(jié)標(biāo)以星號(hào)。這部分內(nèi)容,課時(shí)少的教學(xué)可以省略,僅供閱讀參考。
在本書(shū)出版之際,謹(jǐn)向給予本人熱情支持和大力幫助的江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院原黨委書(shū)記楊慧中教授深表謝意;并深情期望讀者不吝直率地提出批評(píng)意見(jiàn)和建議,以期更準(zhǔn)確地傳播Python概念,實(shí)現(xiàn)良好的社會(huì)效應(yīng)。
張基溫
2024年8月于錫蠡溪苑
第1章 Python編程生態(tài)
1.1 Python編程要素 002
1.1.1 程序設(shè)計(jì)語(yǔ)言的級(jí)別 002
1.1.2 Python程序的運(yùn)行方式與IDLE 004
1.1.3 對(duì)象、標(biāo)識(shí)符與Python命名規(guī)則 005
1.1.4 運(yùn)算符與表達(dá)式 006
1.1.5 語(yǔ)句與代碼封裝體 007
1.1.6 注釋與良好的程序設(shè)計(jì)風(fēng)格 009
習(xí)題1.1 011
1.2 Python對(duì)象 012
1.2.1 Python對(duì)象的ID、類(lèi)型和應(yīng)用屬性 012
1.2.2 Python數(shù)值類(lèi)型和bool類(lèi)型 014
1.2.3 Python容器類(lèi)型 016
習(xí)題1.2 018
1.3 Python變量 018
1.3.1 Python變量是名字型變量 019
1.3.2 Python賦名語(yǔ)句 020
1.3.3 Python命名空間及其表示 023
1.3.4 對(duì)象的引用計(jì)數(shù)與生命周期 024
習(xí)題1.3 025
1.4 不變性原則:Python的不可變對(duì)象與可變對(duì)象 026
1.4.1 不變性原則 026
1.4.2 賦值程序中的主要擾動(dòng)因素 026
1.4.3 Python對(duì)象的不可變類(lèi)型與可變類(lèi)型 027
1.4.4 不可變對(duì)象的可哈希性 028
習(xí)題1.4 029
1.5 運(yùn)算符與表達(dá)式 030
1.5.1 Python算術(shù)運(yùn)算符與算術(shù)表達(dá)式 030
1.5.2 布爾運(yùn)算符與布爾表達(dá)式 032
1.5.3 Python表達(dá)式的計(jì)算順序 033
1.5.4 字符串的簡(jiǎn)單操作 034
1.5.5 input()函數(shù) 034
1.5.6 f-string表達(dá)式 035
習(xí)題1.5 037
1.6 Python開(kāi)發(fā)資源 038
1.6.1 Python的四層開(kāi)發(fā)資源 038
1.6.2 Python模塊及其導(dǎo)入 042
1.6.3 Python包及其導(dǎo)入 043
習(xí)題1.6 044
第2章 Python結(jié)構(gòu)化編程基礎(chǔ)
2.1 Python流程控制語(yǔ)句 046
2.1.1 選擇結(jié)構(gòu):if 語(yǔ)句 046
2.1.2 重復(fù)結(jié)構(gòu):while語(yǔ)句 049
2.1.3 迭代與iter-next結(jié)構(gòu) 051
2.1.4 for 結(jié)構(gòu) 052
2.1.5 break語(yǔ)句與continue語(yǔ)句 053
2.1.6 for和while的else子句 054
2.1.7 異常處理與try-except語(yǔ)句 055
習(xí)題2.1 058
2.2 Python函數(shù) 059
2.2.1 Python函數(shù)的定義與調(diào)用 059
2.2.2 Python函數(shù)返回與return語(yǔ)句 060
2.2.3 Python參數(shù)傳遞技術(shù) 062
2.2.4 函數(shù)的遞歸調(diào)用 065
2.2.5 函數(shù)嵌套 067
習(xí)題2.2 067
2.3 Python命名空間及其生命周期與作用域 068
2.3.1 Python的四級(jí)命名空間及其生命周期 068
2.3.2 Python命名空間的作用域規(guī)則 068
2.3.3 global和nonlocal關(guān)鍵詞 071
2.3.4 用內(nèi)置函數(shù)locals()和globals()獲取命名空間內(nèi)容 073
習(xí)題2.3 074
第3章 Python函數(shù)式編程
3.1 函數(shù)式編程由來(lái) 078
3.1.1 函數(shù)式編程的數(shù)學(xué)思想基礎(chǔ)范疇論 078
3.1.2 函數(shù)式編程是λ演算的直接延續(xù) 079
習(xí)題3.1 079
3.2 Python函數(shù)式編程基礎(chǔ) 080
3.2.1 函數(shù)是第一等對(duì)象 080
3.2.2 純函數(shù)與不變性原則 081
習(xí)題3.2 083
3.3 Python函數(shù)式編程的常用模式 083
3.3.1 lambda表達(dá)式 083
3.3.2 高階函數(shù) 084
3.3.3* 函數(shù)柯里化 086
3.3.4* 偏函數(shù) 086
3.3.5* 生成器 088
3.3.6 閉包 092
3.3.7 Python裝飾器 093
習(xí)題3.3 096
第4章 Python基于類(lèi)的編程
4.1 類(lèi)的定義與實(shí)例對(duì)象的構(gòu)建 100
4.1.1 用class關(guān)鍵詞封裝類(lèi)對(duì)象 100
4.1.2 用構(gòu)造函數(shù)創(chuàng)建實(shí)例對(duì)象 101
4.1.3 類(lèi)的屬性與方法 103
4.1.4 類(lèi)與實(shí)例對(duì)象的測(cè)試與維護(hù) 106
習(xí)題4.1 108
4.2 類(lèi)的繼承與組合 110
4.2.1 父類(lèi)通過(guò)繼承派生子類(lèi) 111
4.2.2 Python的繼承路徑:mro、super、object和type 114
4.2.3* Python類(lèi)與對(duì)象的命名空間及其作用域 118
4.2.4* Python類(lèi)組合 121
習(xí)題4.2 122
4.3 為Python程序增添異彩 124
4.3.1 Python魔法方法 124
4.3.2 Python魔法屬性 128
4.3.3* Python類(lèi)相關(guān)裝飾器 130
習(xí)題4.3 132
4.4* 抽象,再抽象 134
4.4.1 抽象類(lèi)與ABC 134
4.4.2 Python元類(lèi) 135
習(xí)題4.4 138
第5章 Python容器操作
5.1 Python內(nèi)存內(nèi)置容器對(duì)象的共性操作 142
5.1.1 內(nèi)存內(nèi)置容器對(duì)象的創(chuàng)建與類(lèi)型轉(zhuǎn)換 142
5.1.2 容器對(duì)象屬性獲取 144
5.1.3 容器及成員關(guān)系運(yùn)算 146
5.1.4 容器的可迭代性操作 146
5.1.5 可變對(duì)象與不可變對(duì)象的復(fù)制 147
習(xí)題5.1 149
5.2 序列對(duì)象操作 150
5.2.1 序列索引 150
5.2.2 序列切片與拆分 152
5.2.3 序列連接與重復(fù) 153
5.2.4 列表的個(gè)性化操作 153
5.2.5 可變對(duì)象的淺復(fù)制與深復(fù)制 156
習(xí)題5.2 157
5.3 Python字符串個(gè)性化操作與正則表達(dá)式 159
5.3.1 字符串測(cè)試方法 159
5.3.2 字符串搜索與定位方法 160
5.3.3 字符串拆分與連接方法 160
5.3.4 字符串轉(zhuǎn)換與修改方法 161
5.3.5 正則表達(dá)式與re模塊 162
習(xí)題5.3 165
5.4 Python字典的個(gè)性化特性 167
5.4.1 字典的特征 167
5.4.2 字典操作符 168
5.4.3 字典常用操作方法 168
習(xí)題5.4 169
5.5 Python集合的個(gè)性化特性 171
5.5.1 集合及其對(duì)象創(chuàng)建 171
5.5.2 集合屬性獲取與測(cè)試 172
5.5.3 Python集合運(yùn)算 172
5.5.4 可變集合及其操作 173
習(xí)題5.5 174
5.6* Python文件操作 175
5.6.1 Python文件分類(lèi) 175
5.6.2 文件管理與目錄操作 176
5.6.3 數(shù)據(jù)文件操作 177
習(xí)題5.6 180
第6章* Python開(kāi)發(fā)舉例
6.1 Python數(shù)據(jù)庫(kù)訪問(wèn) 182
6.1.1 數(shù)據(jù)庫(kù)與SQL 182
6.1.2 應(yīng)用程序通過(guò)ODBC操作數(shù)據(jù)庫(kù) 184
6.1.3 pyodbc 186
6.1.4 用SQLite引擎操作數(shù)據(jù)庫(kù) 187
習(xí)題6.1 190
6.2 Python數(shù)據(jù)處理 190
6.2.1 數(shù)據(jù)處理相關(guān)概念 190
6.2.2 數(shù)據(jù)處理的一般過(guò)程 193
6.2.3 數(shù)據(jù)可視化與相關(guān)Python庫(kù) 195
6.2.4 Python數(shù)據(jù)分析與NumPy 197
習(xí)題6.2 207
6.3 Python WWW訪問(wèn) 207
6.3.1 超文本與HTML 208
6.3.2 超文本傳輸協(xié)議HTTP 209
6.3.3 統(tǒng)一資源定位符 210
6.3.4 搜索引擎 211
6.3.5 網(wǎng)絡(luò)爬蟲(chóng) 212
6.3.6 用urllib模塊庫(kù)訪問(wèn)網(wǎng)頁(yè) 213
習(xí)題6.3 216
6.4 Python GUI編程 217
6.4.1 GUI窗口及其原理 217
6.4.2 tkinter簡(jiǎn)介 219
6.4.3 tkinter GUI程序的基本結(jié)構(gòu) 225
6.4.4 tkinter應(yīng)用示例 225
習(xí)題6.4 237
參考文獻(xiàn)