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