本书旨在打造一本彰显Python的亮点、有深度地讲清其概念的教材。全书共6章。第1章为Python编程生态,在为全书学习奠定基础的同时,重点是要在读者心目中筑牢Python以对象为程序主角的一切皆对象思想。第2~4章分别介绍Python结构化编程基础、函数式编程,以及基于类的编程。第5章为Python容器操作,介绍Python面向应用的数据结构基础容器。第6章为Python开发举例,通过数据库访问、数据处理、WWW访问和GUI编程,介绍本书倡导的应用开发重在熟悉领域知识的思想。本书结构合理、概念精准,并提供了一些有助于教学的机制,例如,习题按大节组织,以便针对性更强;用二维码扩展知识范围;每篇有一张思维导图等,供学习者学前了解本篇知识概况,学后进行知识与思路整理。还提供了PPT和教学参考大纲。本书适合高等学校计算机科学与技术、电子信息工程、自动化及通信工程等专业师生选用,也可供想学习Python编程语言的读者自学使用。
计算机是人类思维的辅助工具,并依靠程序设计语言来与人沟通、交流。随着计算机的发展和应用的深化,程序设计语言在竞争中不断发展,推陈出新,呈现出琳琅满目的景象。据统计,迄今已经开发出了超过2500种的高级程序设计语言。曾几何时,在长期的明争暗斗中,在TIOBE的擂台上,C、Java、C 一直垄断着前三霸的地位。许多程序设计语言也曾经想冲击这个位置,却一直无功而返。但这一局面却在近年被荷兰的吉多·范罗苏姆(Guido van Rossum)于1989年圣诞节假期为打发无聊的时光而创作出来的Python打破了。如图0.1所示,从2018年开始,Python就疾步攀升,并从2022年起便将TIOBE擂台上首席霸主的金腰带牢牢握在手中。
Python的成功并非偶然。它之所以能得到广泛的青睐,是因为大众被它的特点所吸引。但是,不同的人对同一件事物会有不同的感觉。下面是本书作者的刍荛之见。
1.Python深厚的一切皆对象
现在,多数高级程序设计语言都祭起了一切皆对象的大旗。Python虽也如此,但比其他语言覆盖面要宽泛得多,寓意要深刻得多。一个突出的特点是,在Python程序中以对象作为主角,具有ID、type、应用属性和引用计数器;变量只作为角色的名字。这样就增加了内存管理的自动化程度,降低了内存泄漏和内存溢出的概率,有助于提高程序的稳定性、安全性。
2.基于不变性原则和第一类对象的函数式编程
Python基于类型将大部分数据对象定义为不可变类型,并配合有效的作用域法则,大大提高了程序的安全性,有力地支持了函数式编程。同时将函数定义为第一类对象,使函数既可以作为参数,也可以作为返回值。在这两大机制支持下的Python函数式编程,彰显出极有特色的模式,将程序代码转换成数学推演形式的同时,做到了逻辑严密,易于理解,方便管理,便于并发,可以热升级。
3.具有多层抽象和多样灵活性的面向对象编程范式
封装、继承、多态是面向对象编程的三大基本特性。Python除了支持这三大基本特性外,还通过多层抽象,以及魔法方法和魔法属性等多种灵活性机制,将面向对象的抽象和多态发挥得淋漓尽致。
4.良好的程序开发生态
Python提供了丰富的程序开发资源,并将这些资源分为三级:
① 可以直接使用的内置资源(常量、属性、函数和方法)。
② 需导入才可使用的标准库模块。
③ 需安装、导入才可使用的第三方扩展库模块。
本书旨在彰显Python的亮点,讲清它的本质。为此,将有关内容组织成如下六章。
第1章以Python编程生态为题,介绍Python的一些基础知识,为后续学习打下基础。其中最为重要的是筑牢Python程序设计以对象为主角的意识。Python最著名的标签是一切皆对象。这个标签别的程序设计语言也用过,但是,那里的一切皆对象的背后是变量唱主角。而Python的一切皆对象的背后是对象唱主角。
第2、3、4三章,分别介绍 Python结构化编程基础、Python函数式编程和 Python基于类的编程。通过这三章的学习,才能真正理解为什么说Python是一种多范型的程序设计语言。
第5章以Python容器操作为题,介绍Python具有特色的、面向应用的基本数据结构和应用。著名计算机科学家沃斯有一本名著《算法 数据结构=程序》,他把数据结构与算法并列为程序的两大核心元素,说明了数据结构的重要性。这个思想对程序开发,乃至整个计算机科学产生了极大影响。Python提供的字符串、元组、列表、字典、集合和文件,不仅具有广泛的实际应用价值,还进一步构造出现代数据结构的基本构件和工具。它们各自提供了不同的特性和用途,可以帮助开发者高效地管理和操作数据。
第6章通过数据库访问、数据处理、WWW访问和GUI编程4个基本应用方向,介绍基于库(标准库或扩展库)进行软件开发的基本思路。
为向学习者提供更好的学习环境,本书除了在正文中准确地介绍有关概念、方法,选择经典例题外,还配有习题,供学习者对学习成果进行测试。习题的题型有选择题、判断题、填空题、简答题、代码分析题、实践题等。
此外,本书为了兼顾教学课时安排,将一部分章节标以星号。这部分内容,课时少的教学可以省略,仅供阅读参考。
在本书出版之际,谨向给予本人热情支持和大力帮助的江南大学物联网工程学院原党委书记杨慧中教授深表谢意;并深情期望读者不吝直率地提出批评意见和建议,以期更准确地传播Python概念,实现良好的社会效应。
张基温
2024年8月于锡蠡溪苑
第1章 Python编程生态
1.1 Python编程要素 002
1.1.1 程序设计语言的级别 002
1.1.2 Python程序的运行方式与IDLE 004
1.1.3 对象、标识符与Python命名规则 005
1.1.4 运算符与表达式 006
1.1.5 语句与代码封装体 007
1.1.6 注释与良好的程序设计风格 009
习题1.1 011
1.2 Python对象 012
1.2.1 Python对象的ID、类型和应用属性 012
1.2.2 Python数值类型和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 对象的引用计数与生命周期 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算术运算符与算术表达式 030
1.5.2 布尔运算符与布尔表达式 032
1.5.3 Python表达式的计算顺序 033
1.5.4 字符串的简单操作 034
1.5.5 input()函数 034
1.5.6 f-string表达式 035
习题1.5 037
1.6 Python开发资源 038
1.6.1 Python的四层开发资源 038
1.6.2 Python模块及其导入 042
1.6.3 Python包及其导入 043
习题1.6 044
第2章 Python结构化编程基础
2.1 Python流程控制语句 046
2.1.1 选择结构:if 语句 046
2.1.2 重复结构:while语句 049
2.1.3 迭代与iter-next结构 051
2.1.4 for 结构 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函数 059
2.2.1 Python函数的定义与调用 059
2.2.2 Python函数返回与return语句 060
2.2.3 Python参数传递技术 062
2.2.4 函数的递归调用 065
2.2.5 函数嵌套 067
习题2.2 067
2.3 Python命名空间及其生命周期与作用域 068
2.3.1 Python的四级命名空间及其生命周期 068
2.3.2 Python命名空间的作用域规则 068
2.3.3 global和nonlocal关键词 071
2.3.4 用内置函数locals()和globals()获取命名空间内容 073
习题2.3 074
第3章 Python函数式编程
3.1 函数式编程由来 078
3.1.1 函数式编程的数学思想基础范畴论 078
3.1.2 函数式编程是λ演算的直接延续 079
习题3.1 079
3.2 Python函数式编程基础 080
3.2.1 函数是第一等对象 080
3.2.2 纯函数与不变性原则 081
习题3.2 083
3.3 Python函数式编程的常用模式 083
3.3.1 lambda表达式 083
3.3.2 高阶函数 084
3.3.3* 函数柯里化 086
3.3.4* 偏函数 086
3.3.5* 生成器 088
3.3.6 闭包 092
3.3.7 Python装饰器 093
习题3.3 096
第4章 Python基于类的编程
4.1 类的定义与实例对象的构建 100
4.1.1 用class关键词封装类对象 100
4.1.2 用构造函数创建实例对象 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类相关装饰器 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内存内置容器对象的共性操作 142
5.1.1 内存内置容器对象的创建与类型转换 142
5.1.2 容器对象属性获取 144
5.1.3 容器及成员关系运算 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 字符串转换与修改方法 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 集合及其对象创建 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 数据文件操作 177
习题5.6 180
第6章* Python开发举例
6.1 Python数据库访问 182
6.1.1 数据库与SQL 182
6.1.2 应用程序通过ODBC操作数据库 184
6.1.3 pyodbc 186
6.1.4 用SQLite引擎操作数据库 187
习题6.1 190
6.2 Python数据处理 190
6.2.1 数据处理相关概念 190
6.2.2 数据处理的一般过程 193
6.2.3 数据可视化与相关Python库 195
6.2.4 Python数据分析与NumPy 197
习题6.2 207
6.3 Python WWW访问 207
6.3.1 超文本与HTML 208
6.3.2 超文本传输协议HTTP 209
6.3.3 统一资源定位符 210
6.3.4 搜索引擎 211
6.3.5 网络爬虫 212
6.3.6 用urllib模块库访问网页 213
习题6.3 216
6.4 Python GUI编程 217
6.4.1 GUI窗口及其原理 217
6.4.2 tkinter简介 219
6.4.3 tkinter GUI程序的基本结构 225
6.4.4 tkinter应用示例 225
习题6.4 237
参考文献