本書旨在打造一本彰顯Python的亮點、有深度地講清其概念的教材。全書共6章。第1章為Python編程生態(tài),在為全書學習奠定基礎(chǔ)的同時,重點是要在讀者心目中筑牢Python以對象為程序主角的一切皆對象思想。第2~4章分別介紹Python結(jié)構(gòu)化編程基礎(chǔ)、函數(shù)式編程,以及基于類的編程。第5章為Python容器操作,介紹Python面向應用的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)容器。第6章為Python開發(fā)舉例,通過數(shù)據(jù)庫訪問、數(shù)據(jù)處理、WWW訪問和GUI編程,介紹本書倡導的應用開發(fā)重在熟悉領(lǐng)域知識的思想。本書結(jié)構(gòu)合理、概念精準,并提供了一些有助于教學的機制,例如,習題按大節(jié)組織,以便針對性更強;用二維碼擴展知識范圍;每篇有一張思維導圖等,供學習者學前了解本篇知識概況,學后進行知識與思路整理。還提供了PPT和教學參考大綱。本書適合高等學校計算機科學與技術(shù)、電子信息工程、自動化及通信工程等專業(yè)師生選用,也可供想學習Python編程語言的讀者自學使用。
計算機是人類思維的輔助工具,并依靠程序設(shè)計語言來與人溝通、交流。隨著計算機的發(fā)展和應用的深化,程序設(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、應用屬性和引用計數(shù)器;變量只作為角色的名字。這樣就增加了內(nèi)存管理的自動化程度,降低了內(nèi)存泄漏和內(nèi)存溢出的概率,有助于提高程序的穩(wěn)定性、安全性。
2.基于不變性原則和第一類對象的函數(shù)式編程
Python基于類型將大部分數(shù)據(jù)對象定義為不可變類型,并配合有效的作用域法則,大大提高了程序的安全性,有力地支持了函數(shù)式編程。同時將函數(shù)定義為第一類對象,使函數(shù)既可以作為參數(shù),也可以作為返回值。在這兩大機制支持下的Python函數(shù)式編程,彰顯出極有特色的模式,將程序代碼轉(zhuǎn)換成數(shù)學推演形式的同時,做到了邏輯嚴密,易于理解,方便管理,便于并發(fā),可以熱升級。
3.具有多層抽象和多樣靈活性的面向?qū)ο缶幊谭妒?br />封裝、繼承、多態(tài)是面向?qū)ο缶幊痰娜蠡咎匦。Python除了支持這三大基本特性外,還通過多層抽象,以及魔法方法和魔法屬性等多種靈活性機制,將面向?qū)ο蟮某橄蠛投鄳B(tài)發(fā)揮得淋漓盡致。
4.良好的程序開發(fā)生態(tài)
Python提供了豐富的程序開發(fā)資源,并將這些資源分為三級:
① 可以直接使用的內(nèi)置資源(常量、屬性、函數(shù)和方法)。
② 需導入才可使用的標準庫模塊。
③ 需安裝、導入才可使用的第三方擴展庫模塊。
本書旨在彰顯Python的亮點,講清它的本質(zhì)。為此,將有關(guān)內(nèi)容組織成如下六章。
第1章以Python編程生態(tài)為題,介紹Python的一些基礎(chǔ)知識,為后續(xù)學習打下基礎(chǔ)。其中最為重要的是筑牢Python程序設(shè)計以對象為主角的意識。Python最著名的標簽是一切皆對象。這個標簽別的程序設(shè)計語言也用過,但是,那里的一切皆對象的背后是變量唱主角。而Python的一切皆對象的背后是對象唱主角。
第2、3、4三章,分別介紹 Python結(jié)構(gòu)化編程基礎(chǔ)、Python函數(shù)式編程和 Python基于類的編程。通過這三章的學習,才能真正理解為什么說Python是一種多范型的程序設(shè)計語言。
第5章以Python容器操作為題,介紹Python具有特色的、面向應用的基本數(shù)據(jù)結(jié)構(gòu)和應用。著名計算機科學家沃斯有一本名著《算法 數(shù)據(jù)結(jié)構(gòu)=程序》,他把數(shù)據(jù)結(jié)構(gòu)與算法并列為程序的兩大核心元素,說明了數(shù)據(jù)結(jié)構(gòu)的重要性。這個思想對程序開發(fā),乃至整個計算機科學產(chǎn)生了極大影響。Python提供的字符串、元組、列表、字典、集合和文件,不僅具有廣泛的實際應用價值,還進一步構(gòu)造出現(xiàn)代數(shù)據(jù)結(jié)構(gòu)的基本構(gòu)件和工具。它們各自提供了不同的特性和用途,可以幫助開發(fā)者高效地管理和操作數(shù)據(jù)。
第6章通過數(shù)據(jù)庫訪問、數(shù)據(jù)處理、WWW訪問和GUI編程4個基本應用方向,介紹基于庫(標準庫或擴展庫)進行軟件開發(fā)的基本思路。
為向?qū)W習者提供更好的學習環(huán)境,本書除了在正文中準確地介紹有關(guān)概念、方法,選擇經(jīng)典例題外,還配有習題,供學習者對學習成果進行測試。習題的題型有選擇題、判斷題、填空題、簡答題、代碼分析題、實踐題等。
此外,本書為了兼顧教學課時安排,將一部分章節(jié)標以星號。這部分內(nèi)容,課時少的教學可以省略,僅供閱讀參考。
在本書出版之際,謹向給予本人熱情支持和大力幫助的江南大學物聯(lián)網(wǎng)工程學院原黨委書記楊慧中教授深表謝意;并深情期望讀者不吝直率地提出批評意見和建議,以期更準確地傳播Python概念,實現(xiàn)良好的社會效應。
張基溫
2024年8月于錫蠡溪苑
第1章 Python編程生態(tài)
1.1 Python編程要素 002
1.1.1 程序設(shè)計語言的級別 002
1.1.2 Python程序的運行方式與IDLE 004
1.1.3 對象、標識符與Python命名規(guī)則 005
1.1.4 運算符與表達式 006
1.1.5 語句與代碼封裝體 007
1.1.6 注釋與良好的程序設(shè)計風格 009
習題1.1 011
1.2 Python對象 012
1.2.1 Python對象的ID、類型和應用屬性 012
1.2.2 Python數(shù)值類型和bool類型 014
1.2.3 Python容器類型 016
習題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
習題1.3 025
1.4 不變性原則:Python的不可變對象與可變對象 026
1.4.1 不變性原則 026
1.4.2 賦值程序中的主要擾動因素 026
1.4.3 Python對象的不可變類型與可變類型 027
1.4.4 不可變對象的可哈希性 028
習題1.4 029
1.5 運算符與表達式 030
1.5.1 Python算術(shù)運算符與算術(shù)表達式 030
1.5.2 布爾運算符與布爾表達式 032
1.5.3 Python表達式的計算順序 033
1.5.4 字符串的簡單操作 034
1.5.5 input()函數(shù) 034
1.5.6 f-string表達式 035
習題1.5 037
1.6 Python開發(fā)資源 038
1.6.1 Python的四層開發(fā)資源 038
1.6.2 Python模塊及其導入 042
1.6.3 Python包及其導入 043
習題1.6 044
第2章 Python結(jié)構(gòu)化編程基礎(chǔ)
2.1 Python流程控制語句 046
2.1.1 選擇結(jié)構(gòu):if 語句 046
2.1.2 重復結(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
習題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
習題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
習題2.3 074
第3章 Python函數(shù)式編程
3.1 函數(shù)式編程由來 078
3.1.1 函數(shù)式編程的數(shù)學思想基礎(chǔ)范疇論 078
3.1.2 函數(shù)式編程是λ演算的直接延續(xù) 079
習題3.1 079
3.2 Python函數(shù)式編程基礎(chǔ) 080
3.2.1 函數(shù)是第一等對象 080
3.2.2 純函數(shù)與不變性原則 081
習題3.2 083
3.3 Python函數(shù)式編程的常用模式 083
3.3.1 lambda表達式 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
習題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 類與實例對象的測試與維護 106
習題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
習題4.2 122
4.3 為Python程序增添異彩 124
4.3.1 Python魔法方法 124
4.3.2 Python魔法屬性 128
4.3.3* Python類相關(guān)裝飾器 130
習題4.3 132
4.4* 抽象,再抽象 134
4.4.1 抽象類與ABC 134
4.4.2 Python元類 135
習題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 可變對象與不可變對象的復制 147
習題5.1 149
5.2 序列對象操作 150
5.2.1 序列索引 150
5.2.2 序列切片與拆分 152
5.2.3 序列連接與重復 153
5.2.4 列表的個性化操作 153
5.2.5 可變對象的淺復制與深復制 156
習題5.2 157
5.3 Python字符串個性化操作與正則表達式 159
5.3.1 字符串測試方法 159
5.3.2 字符串搜索與定位方法 160
5.3.3 字符串拆分與連接方法 160
5.3.4 字符串轉(zhuǎn)換與修改方法 161
5.3.5 正則表達式與re模塊 162
習題5.3 165
5.4 Python字典的個性化特性 167
5.4.1 字典的特征 167
5.4.2 字典操作符 168
5.4.3 字典常用操作方法 168
習題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
習題5.5 174
5.6* Python文件操作 175
5.6.1 Python文件分類 175
5.6.2 文件管理與目錄操作 176
5.6.3 數(shù)據(jù)文件操作 177
習題5.6 180
第6章* Python開發(fā)舉例
6.1 Python數(shù)據(jù)庫訪問 182
6.1.1 數(shù)據(jù)庫與SQL 182
6.1.2 應用程序通過ODBC操作數(shù)據(jù)庫 184
6.1.3 pyodbc 186
6.1.4 用SQLite引擎操作數(shù)據(jù)庫 187
習題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
習題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)絡爬蟲 212
6.3.6 用urllib模塊庫訪問網(wǎng)頁 213
習題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應用示例 225
習題6.4 237
參考文獻