《Python语言程序设计》
高等学校计算机专业规划教材
Python语言程序设计
王恺 王志 李涛 朱洪文 编著
前 言
在Python开发者社群流行着一句话:“人生苦短,我用Python。”虽是一句戏言,但却揭示了Python语言的优势。Python是一种体现简单主义思想的语言,可以使用尽量少的代码完成更多工作。Python使开发者能够专注于解决问题而不是去搞明白语言本身。另外,Python有简单易懂的说明文档和丰富的第三方库,初学者很容易上手。
除了简单易学以外,Python还具有免费开源、跨平台性、高层语言、面向对象、丰富的库、胶水语言等优点,因此,在系统编程、图形界面开发、科学计算、文本处理、数据库编程、网络编程、Web开发、自动化运维、金融分析、多媒体应用、游戏开发、人工智能等方面得到广泛应用。不仅大量计算机专业人员选择使用Python进行快速开发,非计算机专业人员也纷纷选择Python帮助自己解决专业问题。根据TIOBE的最新排名,Python已超越C#,与Java、C、C++一起成为全球前四大流行语言。
Python的发展也给高校编程课程的教学带来了新的方向,很多高校纷纷开设相关课程。目前,Python的教程很多,但从高校本科教学需求出发,真正体现通过编程解决实际问题的理念的教程还不多。本书正是基于这样的思路和理念,由南开大学计算机学院的教师结合多年教学和项目开发实践经验编写而成,希望能够为高校理工科学生提供一本理论和实践兼备的Python编程入门教材。
在编写上,我们强调通过问题的解决过程向读者展示程序设计的本质以及Python程序的编写方法,使读者能够在有限时间内快速掌握Python编程并初步具备利用Python语言解决实际应用问题的能力。本书的特色包括:
1)针对每一个知识点提供了相关程序实例,实例的规模循序渐进,使读者更直观地理解Python编程语言的基本语法和程序设计方法,并逐步提升解决问题的能力。
2)针对重点和难点知识,通过大量“提示”和“注意”向读者强调并详细说明不易理解或容易混淆的内容。
3)大多数章节提供了课后习题,供读者检验自己的学习情况,及时发现学习过程中存在的问题。
4)为学生和老师提供较为丰富的学习和教学资源,降低学习和教学的门槛。
本书共分为10章,各章主要内容如下。
第1章首先给出程序设计和Python语言的简单介绍,包括编译型语言和解释型语言的区别、Python发展史及其特点和应用领域。然后,以Windows和Linux平台为例介绍了Python 3.7.0的安装步骤。接着,通过一个简单的HelloWorld程序使读者对Python程序的运行方式、注释方法、编写规范和标准输入/输出方法有初步认识。最后,介绍了Python自带的IDLE开发环境的使用方法。
第2章首先给出变量的定义方法和Number、String、List等常用的Python数据类型,通过这部分内容,读者可掌握利用计算机存储数据的方法。然后,介绍常用的运算符,包括占位运算符、算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、身份运算符、成员运算符和序列运算符。通过这部分内容,读者可掌握不同类型数据所支持的运算及运算规则。最后,介绍条件和循环两种语句结构。通过这部分内容,读者可以设计程序来解决具有更复杂逻辑结构的问题。
第3章首先介绍函数的定义与调用方法,以及与函数定义和调用相关的参数列表、返回值等内容。然后,介绍模块和包的概念与作用,以及模块和包的使用方法。接着,介绍变量的作用域,包括全局变量、局部变量的定义和使用方法以及global、nonlocal关键字的作用。最后,介绍函数相关的高级应用,包括递归函数、高阶函数、lambda函数、闭包和装饰器。
第4章首先介绍类与对象的概念以及它们的定义和使用方法,并给出Python类中包括构造方法和析构方法在内的常用内置方法的作用。然后,介绍继承与多态的概念与作用,并给出它们的具体实现方法。最后,介绍类与对象相关的高级应用,包括与类相关的3个内置函数(isinstance、issubclass和type)、类方法、静态方法、动态扩展类与实例、
__slots__、@property、元类、单例模式和鸭子类型。
第5章首先介绍可变类型与不可变类型的概念和区别。然后,在第2章内容的基础上进一步介绍列表、元组、集合和字典这些数据类型的更多使用方法。最后,介绍关于序列、集合和字典的一些高级应用,包括切片、列表生成表达式、生成器和迭代器。
第6章在第2章内容的基础上进一步介绍字符串的使用方法,包括字符串常用操作、格式化方法及正则表达式。在正则表达式部分将给出一个简单的爬虫程序示例,供读者参考。
第7章首先介绍os模块的使用,通过os模块可以方便地使用操作系统的相关功能,如创建目录、删除目录等。然后,介绍文件读写操作,利用文件进行数据的长期保存。接着,介绍一维数据和二维数据的概念,以及对可用于存储一维/二维数据的CSV格式文件的操作方法。最后,介绍异常相关的内容,包括异常的定义、分类和处理。
第8章介绍Python多线程与多进程编程的一些基本方法。使用多线程模块threading提供的Thread、Lock、Condition、Queue、Barrier等类,实现多线程创建、线程间的同步和通信。使用多进程模块multiprocessing提供的Process、Pool、Queue、Pipe、Lock等类,实现子进程创建、进程池(批量创建子进程并管理子进程数量上限)以及进程间通信。
第9章基于图书管理系统、图形化界面计算器、电影推荐模型的设计和开发过程,综合运用前8章学习到的Python编程知识,例如函数、类、文件操作、正则表达式、多线程等,并且增加了Python的网络编程和图形用户界面的编程操作。
第10章首先给出了Python绘制图像的模块(turtle)和获取随机数的模块(random)这两个库的简介及使用方法,然后介绍Python常用的内置函数功能。最后,介绍一些流行的第三方库的功能、安装及使用方法。
在利用本书学习Python编程时,建议读者一定要多思考、多分析、多动手实践。当看到一个具体问题时,首先要自己分析该问题,设计求解该问题的算法;然后梳理程序结构,编写程序实现算法;最后运行程序,尝试通过系统的错误提示或通过程序调试方法解决程序中存在的语法错误和逻辑错误。只有这样,才能真正掌握一门程序设计语言,进而在实际中真正做到熟练运用程序设计语言解决具体应用问题。
本书由南开大学计算机学院的任课教师和华育兴业科技有限公司的企业专家共同编写完成,具体分工如下:李涛负责第1~3章的编写;王恺负责第4~7章、第7章和第8章的课后习题、第9章的电影推荐模型案例的编写,并负责全书的统稿和定稿;王志负责第8章和第10章、第9章的图书管理系统实例和图形化界面计算器实例的编写;朱洪文负责第1~6章习题的编写。
本书在编写过程中得到了很多人的帮助。北京华育兴业科技有限公司的企业专家对本书的结构和内容提出了很多建议,并通过“教育部–华育兴业产学合作协同育人”项目在课程和教学资源的建设方面提供了大力支持。机械工业出版社华章分社的朱劼和赵亮宇编辑对本书的出版提供了很多意见和建议,在此表示真诚的感谢!
在本书编写过程中,吸收了很多Python语言方面的网络资源、书籍中的观点,在此向这些作者一并致谢。限于作者的时间和水平,书中难免有疏漏之处,恳请各位同行和读者指正。
编 者
2018年12月于南开园
目 录
前言
1.2.1 在Windows平台上安装Python语言环境 8
1.2.2 在Linux平台上安装Python语言环境 10
第4章 面向对象 87
4.1 类与对象 87
4.1.1 类的定义 87
4.1.2 创建实例 88
4.1.3 类属性定义及其访问 89
4.1.4 类中普通方法定义及调用 91
4.1.5 私有属性 92
4.1.6 构造方法 93
4.1.7 析构方法 95
4.1.8 常用内置方法 96
4.2 继承与多态 98
4.2.1 什么是继承 98
4.2.2 如何继承父类 99
4.2.3 方法重写 100
4.2.4 super方法 101
4.3 高级应用 103
4.3.1 内置函数isinstance、issubclass和type 103
4.3.2 类方法 104
4.3.3 静态方法 104
4.3.4 动态扩展类与实例 105
4.3.5 __slots__ 106
4.3.6 @property 107
4.3.7 元类 108
4.3.8 单例模式 109
4.3.9 鸭子类型 111
4.4 本章小结 112
4.5 课后习题 112
第5章 序列、集合和字典 116
5.1 可变类型与不可变类型 116
5.2 列表 117
5.2.1 创建列表 117
5.2.2 拼接列表 118
5.2.3 复制列表元素 119
5.2.4 查找列表元素 120
5.2.5 插入列表元素 121
5.2.6 删除列表元素 121
5.2.7 获取列表中的最大元素 122
5.2.8 获取列表中的最小元素 122
5.2.9 统计元素出现的次数 122
5.2.10 计算列表长度 123
5.2.11 列表中元素排序 123
5.3 元组 124
5.3.1 创建元组 125
5.3.2 创建具有单个元素的元组 125
5.3.3 拼接元组 126
5.3.4 获取元组中的最大元素 126
5.3.5 获取元组中的最小元素 126
5.3.6 元组的不变性 126
5.4 集合 127
5.4.1 创建集合 127
5.4.2 元素唯一性 127
5.4.3 插入集合元素 127
5.4.4 交集 128
5.4.5 并集 128
5.4.6 差集 129
5.4.7 对称差集 129
5.4.8 子集 129
5.4.9 父集 130
5.5 字典 130
5.5.1 创建字典 130
5.5.2 初始化字典中的元素 130
5.5.3 修改/插入字典元素 131
5.5.4 删除字典中的元素 132
5.5.5 计算字典中元素的个数 133
5.5.6 清除字典中的所有元素 133
5.5.7 判断字典中是否存在键 133
5.5.8 拼接两个字典 134
5.5.9 获取字典中键的集合 135
5.5.10 获取字典中值的集合 135
5.5.11 获取字典中的元素数组 135
5.5.12 浅拷贝 136
5.5.13 深拷贝 137
5.6 高级应用 138
5.6.1 切片 138
5.6.2 列表生成表达式 138
5.6.3 生成器 139
5.6.4 迭代器 140
5.7 本章小结 142
5.8 课后习题 142
第6章 字符串 146
6.1 字符串常用操作 146
6.1.1 创建字符串 146
6.1.2 单引号、双引号、三引号之间的区别 146
6.1.3 字符串比较 148
6.1.4 字符串切割 149
6.1.5 字符串检索 150
6.1.6 替换字符串中的字符 150
6.1.7 去除字符串空格 151
6.1.8 复制字符串 152
6.1.9 连接字符串 152
6.1.10 获取字符串长度 152
6.1.11 大小写转换 153
6.1.12 测试字符串的组成部分 153
6.2 格式化方法 154
6.2.1 占位符 154
6.2.2 format方法 154
6.3 正则表达式 155
6.3.1 基础语法 155
6.3.2 re模块的使用 157
6.4 本章小结 165
6.5 课后习题 165
第7章 I/O编程与异常 169
7.1 os模块的使用 169
7.1.1 查看系统平台 169
7.1.2 获取当前系统平台路径分隔符 169
7.1.3 获取当前工作目录 170
7.1.4 获取环境变量值 170
7.1.5 获取文件和目录列表 170
7.1.6 创建目录 171
7.1.7 删除目录 171
7.1.8 获取指定相对路径的绝对路径 172
7.1.9 获取指定路径的目录名或文件名 172
7.1.10 判断指定路径目标是否为文件 173
7.1.11 判断指定路径目标是否为目录 173
7.1.12 判断指定路径是否存在 174
7.1.13 判断指定路径是否为绝对路径 174
7.1.14 分离文件扩展名 174
7.1.15 路径连接 175
7.1.16 获取文件名 175
7.1.17 获取文件路径 175
7.2 文件读写 176
7.2.1 open函数 176
7.2.2 with语句 177
7.2.3 文件对象方法 177
7.3 数据的处理 180
7.3.1 一维数据 180
7.3.2 二维数据 181
7.3.3 使用CSV格式操作一维、二维数据 181
7.4 异常的定义和分类 183
7.4.1 异常的定义 183
7.4.2 异常的分类 183
7.5 异常处理 184
7.5.1 try except 185
7.5.2 else 185
7.5.3 finally 186
7.5.4 raise 187
7.5.5 断言 187
7.5.6 自定义异常 188
7.6 本章小结 188
7.7 课后习题 188
第8章 多线程与多进程 191
8.1 线程与进程的定义 191
8.1.1 线程 191
8.1.2 进程 191
8.2 多线程 192
8.2.1 多线程的创建和启动 192
8.2.2 多线程的合并 195
8.2.3 守护线程 196
8.2.4 多线程的同步 197
8.3 多进程 206
8.3.1 创建多进程 206
8.3.2 多进程间的通信 207
8.3.3 多进程间的同步 207
8.3.4 Pool对象 208
8.3.5 Manager对象 210
8.3.6 Listener与Client对象 210
8.4 本章小结 211
8.5 课后习题 212
第9章 综合实例 213
9.1 图书管理系统 213
9.1.1 实例问题描述 213
9.1.2 服务器的搭建 213
9.1.3 定义图书类 214
9.1.4 注册图书信息 214
9.1.5 查询图书信息 215
9.1.6 删除图书信息 216
9.1.7 系统的远程交互过程 217
9.1.8 系统的完整代码 218
9.2 图形化界面计算器 221
9.2.1 实例问题描述 221
9.2.2 Python标准GUI库Tkinter 221
9.2.3 图形界面计算器的完整代码 222
9.3 电影推荐模型 225
9.3.1 基于用户相似度的推荐算法UserCF 225
9.3.2 基于物品相似度的推荐算法ItemCF 226
9.3.3 算法实现 226
9.3.4 实验过程及结果 234
9.4 本章小结 234
第10章 Python常用库 235
10.1 Python标准库 235
10.1.1 turtle模块 235
10.1.2 random模块 237
10.2 常用的Python内置函数 238
10.2.1 数学内置函数 238
10.2.2 数据类型转换 239
10.2.3 序列操作 242
10.2.4 对象操作 243
10.2.5 反射操作 245
10.2.6 变量操作 247
10.2.7 编译执行 247
10.3 第三方库 248
10.3.1 安装第三方库 248
10.3.2 PyInstaller 248
10.3.3 jieba 250
10.3.4 Scrapy 251
10.3.5 Django 252
10.3.6 NumPy 255
10.3.7 Pandas 261
10.3.8 Matplotlib 261
10.3.9 Pygame 264
10.4 本章小结 264
参考文献 265
- 点赞
- 收藏
- 关注作者
评论(0)