第1章 Python概述 1
1.1 Python语言概述 1
1.1.1 Python语言简介 1
1.1.2 Python语言的特点 1
1.1.3 Python语言的应用范围 2
1.2 Python语言版本和开发环境 2
1.2.1 Python语言的版本 2
1.2.2 Python语言的实现 2
1.2.3 Python语言的集成开发环境 3
1.3 下载和安装Python 3
1.3.1 下载Python 3
1.3.2 安装Python 4
1.3.3 安装和管理Python扩展包 4
1.4 使用Python解释器解释执行Python程序 6
1.4.1 运行Python解释器 6
1.4.2 运行Python集成开发环境 7
1.5 使用文本编辑器和命令行编写和执行Python源文件程序 8
1.5.1 编写Hello World程序 9
1.5.2 Hello World程序(hello.py)源代码分析 10
1.5.3 运行Python源代码程序 10
1.5.4 命令行参数 11
1.6 使用集成开发环境IDLE编写和执行Python源文件程序 12
1.6.1 使用IDLE编写程序 12
1.6.2 使用IDLE编辑程序 13
1.7 在线帮助和相关资源 13
1.7.1 Python交互式帮助系统 13
1.7.2 Python文档 16
1.7.3 Python官网 17
1.7.4 Python扩展库索引(PyPI) 17
复习题 18
上机实践 19
第2章 Python语言基础 20
2.1 Python程序概述 20
2.1.1 引例 20
2.1.2 Python程序构成 20
2.2 Python对象和引用 21
2.2.1 Python对象概述 21
2.2.2 使用字面量创建实例对象 21
2.2.3 使用类对象创建实例对象 22
2.2.4 数据类型 22
2.2.5 变量和对象的引用 22
2.2.6 Python是动态类型语言 23
2.2.7 Python是强类型语言 24
2.2.8 对象内存示意图 24
2.2.9 对象的值比较(==)和引用判别(is) 25
2.2.10 不可变对象(immutable)和可变对象(mutable) 25
2.3 标识符及其命名规则 26
2.3.1 标识符 26
2.3.2 保留关键字 27
2.3.3 Python预定义标识符 27
2.3.4 命名规则 27
2.4 变量和赋值语句 28
2.4.1 变量的声明和赋值 28
2.4.2 链式赋值语句 28
2.4.3 复合赋值语句 29
2.4.4 删除变量 29
2.4.5 系列解包赋值 29
2.4.6 常量 30
2.5 表达式和运算符 30
2.5.1 表达式的组成 30
2.5.2 表达式的书写规则 31
2.5.3 运算符概述 31
2.5.4 Python运算符及其优先级 31
2.6 语句 32
2.6.1 Python语句 32
2.6.2 Python语句的书写规则 33
2.6.3 复合语句及其缩进书写规则 33
2.6.4 注释语句 34
2.6.5 空语句pass 34
2.7 函数和模块 34
2.7.1 函数的创建和调用 34
2.7.2 内置函数 35
2.7.3 模块函数 35
2.7.4 函数API 36
2.8 类和对象 36
2.8.1 创建类对象 36
2.8.2 实例对象的创建和调用 37
2.9 模块和包 37
复习题 37
上机实践 39
第3章 程序流程控制 41
3.1 顺序结构 41
3.2 选择结构 41
3.2.1 分支结构的形式 42
3.2.2 单分支结构 42
3.2.3 双分支结构 43
3.2.4 多分支结构 44
3.2.5 if语句的嵌套 45
3.2.6 if语句典型示例代码 46
3.2.7 选择结构综合举例 47
3.3 循环结构 48
3.3.1 可迭代对象 48
3.3.2 range对象 49
3.3.3 for循环 49
3.3.4 while循环 50
3.3.5 循环的嵌套 51
3.3.6 break语句 52
3.3.7 continue语句 53
3.3.8 死循环(无限循环) 54
3.3.9 else子句 55
3.3.10 循环语句典型示例代码 55
3.3.11 循环结构综合举例 56
复习题 57
上机实践 60
第4章 常用内置数据类型 64
4.1 Python内置数据类型概述 64
4.1.1 数值数据类型 64
4.1.2 序列数据类型 64
4.1.3 集合数据类型 65
4.1.4 字典数据类型 65
4.1.5 NoneType、NotImplementedType和EllipsisType 65
4.1.6 其他数据类型 65
4.2 int数据类型(任意精度整数) 65
4.2.1 整型字面量 66
4.2.2 int对象 66
4.2.3 int对象的方法 66
4.2.4 整数的运算 67
4.3 float类型(有限精度浮点数) 68
4.3.1 浮点类型字面量 68
4.3.2 float对象 68
4.3.3 float对象的方法 68
4.3.4 浮点数的运算 69
4.4 complex类型(复数) 70
4.4.1 复数类型字面量 70
4.4.2 complex对象 70
4.4.3 complex对象属性和方法 70
4.4.4 复数的运算 70
4.5 bool数据类型(布尔逻辑值) 71
4.5.1 布尔值字面量 71
4.5.2 bool对象 71
4.5.3 逻辑运算符 72
4.6 str数据类型(字符串) 73
4.6.1 字符串字面量 73
4.6.2 字符串编码 73
4.6.3 转义字符 73
4.6.4 str对象 74
4.6.5 str对象属性和方法 74
4.6.6 字符串的运算 75
4.6.7 对象转换为字符串 75
4.6.8 字符串的格式化 75
4.7 比较关系运算和条件表达式 76
4.7.1 条件表达式 76
4.7.2 关系和测试运算符 77
4.8 算术运算符和位运算符 78
4.8.1 算术运算符 78
4.8.2 位运算符 78
4.9 混合运算和数值类型转换 79
4.9.1 隐式转换 79
4.9.2 显式转换(强制转换) 79
4.10 内置标准数学函数 80
4.10.1 内置数学运算函数 80
4.10.2 数制转换函数 80
复习题 81
上机实践 84
第5章 系列数据类型 89
5.1 Python系列数据概述 89
5.1.1 数组 89
5.1.2 系列数据类型 89
5.2 系列数据的基本操作 90
5.2.1 系列的长度、最大值、最小值、求和 90
5.2.2 系列的索引访问操作 90
5.2.3 系列的切片操作 91
5.2.4 系列的连接和重复操作 92
5.2.5 系列的成员关系操作 92
5.2.6 系列的比较运算操作 93
5.2.7 系列的排序操作 94
5.2.8 内置函数all()和any() 94
5.2.9 系列拆封 94
5.3 元组 95
5.3.1 使用元组字面量创建元组实例对象 95
5.3.2 使用tuple对象创建元组实例对象 96
5.3.3 元组的系列操作 96
5.4 列表 96
5.4.1 使用列表字面量创建列表实例对象 96
5.4.2 使用list对象创建元组实例对象 97
5.4.3 列表的系列操作 97
5.4.4 list对象的方法 97
5.4.5 列表解析表达式 98
5.5 字符串 98
5.5.1 字符串的系列操作 98
5.5.2 字符串编码 99
5.5.3 字符串格式化 99
5.6 字节系列 102
5.6.1 bytes常量 102
5.6.2 创建bytes对象 102
5.6.3 创建bytearray对象 103
5.6.4 bytes和bytearray的系列操作 103
5.6.5 字节编码和解码 104
复习题 104
上机实践 106
第6章 输入和输出 108
6.1 输入和输出概述 108
6.2 命令行参数 108
6.2.1 sys.argv与命令行参数 108
6.2.2 argparse模块和命令行参数解析 109
6.3 标准输入和标准输出函数 110
6.3.1 输入和输出函数 110
6.3.2 交互式用户输入 111
6.3.3 运行时提示输入密码 112
6.4 文件和文件对象 112
6.4.1 文件对象和open函数 112
6.4.2 文件的打开、写入、读取和关闭 113
6.4.3 with语句和上下文管理协议 113
6.5 标准输入、输出和错误流 114
6.5.1 标准输入、输出和错误流文件对象 114
6.5.2 读取任意长度的输入流 115
6.5.3 标准输入、输出和错误流重定向 115
6.6 重定向和管道 116
6.6.1 重定向标准输出到一个文件 117
6.6.2 重定向文件到标准输入 117
6.6.3 管道 118
6.6.4 过滤器 119
复习题 121
上机实践 121
第7章 错误和异常处理 123
7.1 程序的错误 123
7.1.1 语法错误 123
7.1.2 运行时错误 123
7.1.3 逻辑错误 124
7.2 异常处理 125
7.2.1 异常处理概述 125
7.2.2 内置的异常类 125
7.2.3 引发异常 127
7.2.4 捕获处理异常机制概述 128
7.2.5 Python虚拟机捕获处理异常 128
7.2.6 使用try…except…else…finally语句捕获处理异常 128
7.2.7 捕获异常的顺序 129
7.2.8 finally块和发生异常后的处理 130
7.2.9 自定义异常类 130
7.3 断言处理 131
7.3.1 断言处理概述 131
7.3.2 assert语句和AssertionError类 131
7.3.3 启用/禁用断言 132
7.4 程序的基本调试方法 132
7.4.1 语法错误的调试 133
7.4.2 运行时错误的调试 133
7.4.3 逻辑错误的调试 134
复习题 134
上机实践 135
第8章 函数 137
8.1 函数概述 137
8.1.1 函数的基本概念 137
8.1.2 函数的功能 137
8.1.3 Python函数分类 137
8.2 函数的声明和调用 138
8.2.1 函数对象的创建 138
8.2.2 函数的调用 139
8.2.3 作为对象的函数 140
8.2.4 Lamda表达式和匿名函数 140
8.2.5 函数的副作用 141
8.3 参数的传递 141
8.3.1 形式参数和实际参数 141
8.3.2 形式参数变量和对象引用传递 142
8.3.3 传递不可变对象的引用 142
8.3.4 传递可变对象的引用 143
8.3.5 可选参数 143
8.3.6 位置参数和命名参数 144
8.3.7 可变参数 145
8.3.8 强制命名参数 145
8.3.9 参数类型检查 146
8.4 函数的返回值 146
8.4.1 return语句和函数返回值 146
8.4.2 多条return语句 147
8.4.3 返回多个值 148
8.5 变量的作用域 148
8.5.1 全局变量 148
8.5.2 局部变量 149
8.5.3 全局语句global 150
8.5.4 非局部语句nonlocal 151
8.5.5 类成员变量 151
8.5.6 输出局部变量和全局变量 151
8.6 递归函数 152
8.6.1 递归函数的定义 152
8.6.2 递归函数的原理 153
8.6.3 递归函数需要注意的问题 154
8.6.4 递归函数的应用:最大公约数 154
8.6.5 递归函数的应用:汉诺塔 155
8.7 内置函数的使用 156
8.7.1 内置函数一览 156
8.7.2 eval函数 156
8.7.3 exec函数 157
8.7.4 compile函数 157
复习题 157
上机实践 159
第9章 类和对象 161
9.1 面向对象概念 161
9.1.1 对象的定义 161
9.1.2 封装 161
9.1.3 继承 161
9.1.4 多态性 161
9.2 类对象和实例对象 162
9.2.1 类对象 162
9.2.2 实例对象 162
9.3 属性 163
9.3.1 实例属性 163
9.3.2 类属性 164
9.3.3 私有属性和公有属性 164
9.3.4 @property装饰器 165
9.3.5 特殊属性 167
9.3.6 自定义属性 167
9.4 方法 168
9.4.1 实例方法 168
9.4.2 静态方法 169
9.4.3 类方法 170
9.4.4 __init__方法(构造函数)和__new__方法 171
9.4.5 __del__方法(析构函数) 172
9.4.6 私有方法与公有方法 173
9.4.7 方法重载 173
9.5 继承 174
9.5.1 派生类 174
9.5.2 查看继承的层次关系 175
9.5.3 类成员的继承和重写 176
9.6 对象的特殊方法 176
9.6.1 对象的特殊方法概述 176
9.6.2 运算符重载与对象的特殊方法 177
9.6.3 @functools.total_ordering装饰器 179
9.6.4 __call__方法和可调用对象 179
9.7 对象的引用、浅拷贝和深拷贝 180
9.7.1 对象的引用 180
9.7.2 对象的浅拷贝 180
9.7.3 对象的深拷贝 181
复习题 181
上机实践 183
第10章 模块和客户端 185
10.1 模块化程序设计的概念 185
10.1.1 模块化程序设计 185
10.1.2 模块的API 185
10.1.3 模块的实现 186
10.1.4 模块的客户端 187
10.1.5 模块化程序设计的优越性 187
10.2 模块的设计和实现 188
10.2.1 模块设计的一般原则 188
10.2.2 API设计 188
10.2.3 创建模块 188
10.2.4 模块的私有函数 189
10.2.5 模块的测试代码 190
10.2.6 编写模块文档字符串 191
10.2.7 按字节编译的.pyc文件 192
10.3 模块的导入和使用 192
10.3.1 导入模块和使用模块 192
10.3.2 导入模块中的成员 192
10.3.3 重新加载模块 193
10.3.4 动态代入模块 193
10.4 包 194
10.4.1 包的概念 194
10.4.2 创建包 194
10.4.3 包的导入和使用 195
10.5 模块的导入顺序 195
10.5.1 导入模块时的搜索顺序 195
10.5.2 模块搜索路径sys.path 196
10.5.3 dir()内置函数 197
10.6 命名空间与名称查找顺序 198
复习题 198
上机实践 199
第11章 算法与数据结构基础 200
11.1 算法及其性能分析 200
11.1.1 算法概述 200
11.1.2 算法的时间复杂度分析 200
11.1.3 增长量级 201
11.1.4 算法的空间复杂度分析 202
11.2 查找算法 202
11.2.1 顺序查找法 202
11.2.2 二分查找法 204
11.2.3 Python语言提供的查找算法 205
11.3 排序算法 205
11.3.1 冒泡排序法 205
11.3.2 选择排序法 206
11.3.3 插入排序法 207
11.3.4 归并排序法 208
11.3.5 快速排序法 210
11.3.6 Python语言提供的排序算法 211
11.4 常用数据结构 211
11.4.1 数据结构概述 211
11.4.2 常用的数据结构概述 212
11.4.3 Python的collections模块 212
11.5 数组 213
11.5.1 列表和数组 213
11.5.2 array.array对象和数组 213
11.6 栈和队列 214
11.6.1 栈的实现:使用列表 214
11.6.2 deque对象 215
11.6.3 deque作为栈 216
11.6.4 deque作为队列 216
11.7 集合 217
11.7.1 集合的定义 217
11.7.2 判断集合元素是否存在 217
11.7.3 集合的运算:并集、交集、差集和对称差集 218
11.7.4 集合的比较运算:相等、子集和超集 218
11.7.5 集合的长度、最大值、最小值、元素和 219
11.7.6 可变集合的方法 219
11.8 字典(映射) 220
11.8.1 对象的哈希值 220
11.8.2 字典的定义 220
11.8.3 字典的访问操作 221
11.8.4 字典的视图对象 221
11.8.5 判断字典键是否存在 221
11.8.6 字典对象的长度和比较 221
11.8.7 字典对象的方法 222
11.8.8 defaultdict对象 222
11.8.9 OrderedDict对象 223
11.8.10 ChainMap对象 223
11.8.11 Counter对象 224
11.9 collections模块的其他数据结构 226
11.9.1 namedtuple对象 226
11.9.2 UserDict、UserList和UserString对象 227
复习题 227
上机实践 230
第12章 图形用户界面 233
12.1 图形用户界面概述 233
12.1.1 tkinter 233
12.1.2 其他GUI库简介 233
12.2 tkinter概述 234
12.2.1 tkinter模块 234
12.2.2 图形用户界面构成 234
12.2.3 框架和GUI应用程序类 235
12.2.4 tkinter主窗口 236
12.3 几何布局管理器 236
12.3.1 pack几何布局管理器 237
12.3.2 grid几何布局管理器 237
12.3.3 place几何布局管理器 239
12.4 事件处理 240
12.4.1 事件类型 240
12.4.2 事件绑定 240
12.4.3 事件处理函数 241
12.5 常用组件 242
12.5.1 Label 242
12.5.2 LabelFrame 242
12.5.3 Button 243
12.5.4 Message 244
12.5.5 Entry 245
12.5.6 Text 245
12.5.7 Radiobutton 247
12.5.8 Checkbutton 247
12.5.9 Listbox 250
12.5.10 OptionMenu 251
12.5.11 Scale 253
12.5.12 Toplevel 254
12.5.13 ttk子模块控件 254
12.6 对话框 255
12.6.1 通用消息对话框 255
12.6.2 文件对话框 256
12.6.3 颜色选择对话框 257
12.6.4 通用对话框应用举例 258
12.6.5 简单对话框 259
12.7 菜单和工具栏 260
12.7.1 创建主菜单 260
12.7.2 创建上下文菜单 262
12.7.3 菜单应用举例 263
复习题 265
上机实践 266
第13章 图形绘制 268
13.1 Python绘图模块概述 268
13.2 基于tkinter的图形绘制 269
13.2.1 基于tkinter画布绘图概述 269
13.2.2 创建画布对象 269
13.2.3 绘制矩形 270
13.2.4 绘制椭圆 270
13.2.5 绘制圆弧 271
13.2.6 绘制线条 271
13.2.7 绘制多边形 272
13.2.8 绘制字符串 273
13.2.9 应用举例:函数图形 273
13.3 基于turtle模块的海龟绘图 274
13.3.1 海龟绘图概述 274
13.3.2 turtle模块概述 274
13.3.3 绘制正方形 275
13.3.4 绘制多边形 275
13.3.5 绘制圆形螺旋 276
13.3.6 递归图形 277
13.3.7 海龟绘图的应用实例 278
13.4 基于Matplotlib模块的绘图 279
13.4.1 Matplotlib模块概述 279
13.4.2 安装Matplotlib模块 279
13.4.3 使用Matplotlib模块绘图概述 280
13.4.4 绘制函数曲线 280
13.4.5 绘制多个图形 281
13.4.6 绘制直方图 282
复习题 283
上机实践 284
第14章 数值日期和时间处理 286
14.1 相关模块概述 286
14.1.1 数值处理的相关模块 286
14.1.2 日期和时间处理的相关模块 286
14.2 math模块和数学函数 286
14.2.1 math模块的API 286
14.2.2 math模块应用举例 289
14.3 cmath模块和复数数学函数 290
14.4 random模块和随机函数 291
14.4.1 种子和随机状态 291
14.4.2 随机整数 292
14.4.3 随机系列 293
14.5 数值运算模块NumPy 293
14.5.1 数值运算模块的基本使用 293
14.5.2 创建数组 294
14.5.3 处理数组 295
14.5.4 数组应用举例 295
14.6 日期和时间处理 295
14.6.1 相关术语 295
14.6.2 时间对象 296
14.6.3 测量程序运行时间 296
14.6.4 日期对象 297
14.6.5 获取当前日期时间 297
14.6.6 日期时间格式化为字符串 298
14.6.7 日期时间字符串解析为日期时间对象 298
复习题 299
上机实践 300
第15章 字符串和文本处理 303
15.1 相关模块概述 303
15.1.1 字符串和文本处理的相关模块 303
15.1.2 字符串处理概述的常用方法 303
15.2 字符串处理的常用操作 303
15.2.1 字符串的类型判断 303
15.2.2 字符串大小写转换 304
15.2.3 字符串的填充、空白和对齐 304
15.2.4 字符串的测试、查找和替换 305
15.2.5 字符串的拆分和组合 305
15.2.6 字符串的翻译和转换 306
15.2.7 字符串应用举例 306
15.3 正则表达式 307
15.3.1 正则表达式语言概述 307
15.3.2 正则表达式引擎 308
15.3.3 普通字符和转义字符 308
15.3.4 字符类和预定义字符类 309
15.3.5 边界匹配符 309
15.3.6 重复限定符 310
15.3.7 匹配算法:贪婪和懒惰 310
15.3.8 选择分支 311
15.3.9 分组和向后引用 311
15.3.10 正则表达式的匹配模式 313
15.3.11 常用正则表达式 313
15.4 正则表达式模块re 313
15.4.1 匹配和搜索函数 313
15.4.2 匹配选项 314
15.4.3 正则表达式对象 314
15.4.4 匹配对象 315
15.4.5 匹配和替换 316
15.4.6 分割字符串 316
15.5 正则表达式应用举例 316
15.5.1 字符串包含验证 316
15.5.2 字符串查找和拆分 317
15.5.3 字符串替换和清除 318
15.5.4 字符串查找和截取 318
复习题 319
上机实践 320
第16章 文件 322
16.1 文件操作相关模块概述 322
16.2 文本文件的读取和写入 322
16.2.1 文本文件的写入 322
16.2.2 文本文件的读取 323
16.2.3 文本文件的编码 324
16.3 二进制文件的读取和写入 325
16.3.1 二进制文件的写入 325
16.3.2 二进制文件的读取 326
16.4 随机文件访问 326
16.5 内存文件的操作 328
16.5.1 StringIO和内存文本文件操作 328
16.5.2 BytesIO和内存文本文件操作 328
16.6 文件的压缩和解压缩 329
16.7 CSV文件格式的读取和写入 329
16.7.1 csv.reader对象和csv文件的读取 330
16.7.2 csv.writer对象和csv文件的写入 330
16.7.3 csv.DictReader对象和csv文件的读取 331
16.7.4 csv.DictWriter对象和csv文件的写入 332
16.7.5 csv文件格式化参数和Dialect对象 332
16.8 os模块和文件访问 334
16.8.1 文件描述符 334
16.8.2 使用os模块提供的函数访问文件 334
16.9 输入重定向和管道 335
16.9.1 FileInput对象 335
16.9.2 fileinput模块的函数 336
16.9.3 输入重定向 337
16.10 对象系列化 338
16.10.1 对象系列化概念 338
16.10.2 pickle模块和对象系列化 338
复习题 339
上机实践 340
第17章 数据库访问 341
17.1 数据库基础 341
17.1.1 数据库概念 341
17.1.2 关系数据库 341
17.2 Python数据库访问模块 342
17.2.1 通用数据库访问模块 342
17.2.2 专用数据库访问模块 343
17.2.3 SQLite数据库和sqlite3模块 343
17.3 使用sqlite3模块连接和操作SQLite数据库 344
17.3.1 访问数据库的典型步骤 344
17.3.2 创建数据库和表 346
17.3.3 数据库表的插入、更新和删除操作 346
17.3.4 数据库表的查询操作 347
复习题 347
上机实践 348
第18章 网络编程和通信 349
18.1 网络编程的基本概念 349
18.1.1 网络基础知识 349
18.1.2 TCP/IP简介 349
18.1.3 IP地址和域名 350
18.1.4 统一资源定位器URL 351
18.2 基于socket的网络编程 352
18.2.1 socket概述 352
18.2.2 创建socket对象 353
18.2.3 将服务器端socket绑定到指定地址上 353
18.2.4 服务器端socket开始侦听 354
18.2.5 连接和接收连接 355
18.2.6 发送和接收数据 355
18.2.7 简单TCP程序:Echo Server 355
18.2.8 简单UDP程序:Echo Server 357
18.2.9 UDP程序:Quote Server 358
18.3 基于urllib的网络编程 359
18.3.1 打开和读取URL网络资源 359
18.3.2 创建Request对象 359
18.4 基于http的网络编程 360
18.5 基于ftplib的网络编程 360
18.5.1 创建FTP对象 361
18.5.2 创建FTP_TLS对象 362
18.6 基于poplib和smtplib的网络编程 363
18.6.1 使用poplib接收邮件 363
18.6.2 使用smtplib发送邮件 363
复习题 364
上机实践 365
第19章 多线程编程 367
19.1 线程处理概述 367
19.1.1 进程和线程 367
19.1.2 线程的优缺点 367
19.2 创建和启动多线程 368
19.2.1 使用start_new_thread函数创建线程 368
19.2.2 使用Thread对象创建线程 368
19.2.3 自定义派生于Thread的对象 370
19.2.4 线程加入join() 370
19.2.5 用户线程和daemon线程 371
19.3 线程同步 373
19.3.1 线程同步处理 373
19.3.2 基于原语锁(Lock/RLock对象)的简单同步 373
19.3.3 基于条件变量(Condition对象)的同步和通信 375
复习题 377
上机实践 378
第20章 系统管理 379
20.1 系统管理相关模块 379
20.2 目录、文件和磁盘的基本操作 379
20.2.1 创建目录 379
20.2.2 临时目录和文件的创建 379
20.2.3 切换当前工作目录 380
20.2.4 目录内容列表 380
20.2.5 文件通配符和glob.glob函数 380
20.2.6 遍历目录和os.walk函数 381
20.2.7 判断文件/目录是否存在 381
20.2.8 测试文件类型 382
20.2.9 文件的日期及其大小 382
20.2.10 文件和目录的删除 382
20.2.11 文件和目录复制、重命名和移动 383
20.2.12 磁盘的基本操作 383
20.3 执行操作系统命令和运行其他程序 383
20.3.1 os.system函数 383
20.3.2 os.popen函数 384
20.3.3 subprocess模块 384
20.4 获取终端的大小 385
20.5 文件压缩和解压缩 386
20.5.1 shutil模块支持的压缩和解压缩格式 386
20.5.2 make_archive()和文件压缩 386
20.5.3 unpack_archive()函数和文件解压缩 387
20.6 configparser模块和配置文件 387
20.6.1 INI文件及INI文件格式 387
20.6.2 ConfigParser对象和INI文件操作 388
复习题 389
上机实践 390
附录 复习题参考答案 391
参考文献 400