第1章 初识Python 1
1.1 Python概述 1
1.1.1 Python起源 2
1.1.2 Python版本 2
1.1.3 Python应用 3
1.2 搭建Python开发环境 4
1.2.1 获取Python 4
1.2.2 安装Python 4
1.2.3 启动Python 6
1.2.4 多版本Python及虚拟环境的安装 7
1.3 Python开发环境的使用 12
1.3.1 使用自带的IDLE 12
1.3.2 常用的第三方开发工具 13
1.3.3 官网交互式环境 13
1.4 初学者常见问题 14
1.4.1 为什么提示“‘python’不是内部或外部命令……” 14
1.4.2 如何在Python交互模式下运行py文件 14
1.5 本章实战 15
1.5.1 IDLE的简单使用 15
1.5.2 pip工具的使用 16
1.6 本章小结 17
1.7 思考与练习 18
第2章 Python语言基础 19
2.1 Python语法特点 19
2.1.1 注释 20
2.1.2 代码规范 22
2.2 标识符与保留字 25
2.2.1 标识符 25
2.2.2 保留字 26
2.3 使用变量 27
2.3.1 变量定义 27
2.3.2 变量类型 28
2.4 基本数据类型 28
2.4.1 数字类型 28
2.4.2 字符串类型 30
2.4.3 布尔类型 32
2.4.4 数据类型转换 33
2.5 运算符 34
2.5.1 算术运算符 34
2.5.2 比较运算符 35
2.5.3 赋值运算符 36
2.5.4 逻辑运算符 38
2.5.5 位运算符 39
2.5.6 成员运算符 40
2.5.7 身份运算符 40
2.5.8 运算符的优先级 41
2.6 基本输入输出 42
2.6.1 使用input()函数输入 42
2.6.2 使用print()函数输出 43
2.7 本章实战 43
2.7.1 求和 43
2.7.2 求平方根 44
2.7.3 求水仙花数 45
2.7.4 判断素数 47
2.8 本章小结 48
2.9 思考与练习 48
第3章 字符与序列 51
3.1 字符串常用操作 52
3.1.1 计算字符串的长度 53
3.1.2 字母的大小写转换 53
3.1.3 字符串的分隔 54
3.1.4 字符串的拼接 55
3.1.5 字符串查找 58
3.1.6 字符串替换 59
3.1.7 统计字符出现次数 59
3.1.8 去除字符串中的空格和特殊字符 60
3.1.9 格式化字符串 60
3.1.10 encode()和decode()方法 62
3.2 序列 62
3.2.1 索引 63
3.2.2 切片 63
3.2.3 序列相加 65
3.2.4 序列乘法 65
3.2.5 检查某个元素是否是序列的成员 66
3.2.6 计算序列的长度、最大值和最小值 66
3.3 列表 67
3.3.1 删除列表元素 68
3.3.2 访问列表元素 68
3.3.3 更新与扩展列表 69
3.3.4 对列表元素进行统计 70
3.3.5 对列表进行排序 71
3.3.6 列表推导式 72
3.4 元组 75
3.4.1 元组的创建 75
3.4.2 访问元组元素 76
3.4.3 连接元组 76
3.4.4 删除元组 77
3.4.5 元组的运算符 77
3.4.6 生成器 78
3.4.7 元组与列表的区别 79
3.5 字典 79
3.5.1 字典的创建 80
3.5.2 访问字典 80
3.5.3 修改字典 80
3.5.4 删除字典元素 81
3.5.5 字典的内置方法 81
3.5.6 字典的遍历 82
3.6 集合 83
3.6.1 集合的创建 83
3.6.2 集合的常用操作 84
3.6.3 集合的内置方法 86
3.7 本章实战 87
3.8 本章小结 89
3.9 思考与练习 89
第4章 流程控制语句 91
4.1 分支结构 91
4.1.1 单分支if结构 91
4.1.2 双分支结构 92
4.1.3 多分支结构 92
4.2 循环结构 93
4.2.1 while循环 93
4.2.2 while死循环 94
4.2.3 while...else语句 94
4.2.4 for循环 95
4.2.5 循环控制语句 95
4.2.6 循环嵌套 96
4.3 本章实战 97
4.3.1 判断闰年 97
4.3.2 使用snaps库制作数字闹钟 98
4.4 本章小结 98
4.5 思考与练习 99
第5章 正则表达式 101
5.1 认识正则表达式 101
5.1.1 元字符 101
5.1.2 预定义字符集 102
5.1.3 特殊分组用法 103
5.2 re模块中的常用功能函数 104
5.2.1 re.compile函数 104
5.2.2 re.match函数 104
5.2.3 re.search函数 105
5.2.4 re.findall函数 106
5.2.5 re.finditer函数 106
5.2.6 re.split函数 107
5.2.7 re.sub函数 107
5.2.8 re.subn函数 108
5.2.9 注意事项 108
5.3 本章实战 110
5.4 本章小结 112
5.5 思考与练习 112
第6章 函数 113
6.1 函数的创建和调用 113
6.1.1 创建函数 113
6.1.2 调用函数 114
6.2 参数传递 116
6.2.1 不可变类型参数和可变类型参数 117
6.2.2 参数形式 118
6.3 返回值 121
6.3.1 return语句 121
6.3.2 返回多个值 122
6.4 变量的作用域 123
6.4.1 全局变量和局部变量 124
6.4.2 global和nonlocal关键字 124
6.5 匿名函数(lambda) 125
6.6 Collatz序列 126
6.7 本章小结 127
6.8 思考与练习 128
第7章 面向对象编程 129
7.1 面向对象概述 129
7.1.1 面向对象术语简介 130
7.1.2 类的定义 130
7.1.3 类的使用 131
7.1.4 类的方法 132
7.2 深入介绍类 133
7.2.1 类的构造方法 133
7.2.2 类的访问权限 137
7.3 封装 142
7.4 继承与多态 145
7.4.1 类的单继承 146
7.4.2 类的多继承 146
7.4.3 构造函数的继承 148
7.4.4 方法重写 149
7.4.5 继承下的多态 149
7.5 类的专有方法 153
7.6 本章实战 159
7.7 本章小结 161
7.8 思考与练习 162
第8章 模块 165
8.1 模块 165
8.1.1 标准模块 165
8.1.2 import语句 166
8.1.3 搜索路径 167
8.1.4 from...import语句 168
8.1.5 创建模块 169
8.1.6 安装第三方模块 169
8.2 模块的高级技术 170
8.2.1 _name_属性 171
8.2.2 dir函数 171
8.3 Python中的包 172
8.3.1 包的定义 172
8.3.2 包的导入 173
8.3.3 包的组织 173
8.4 常用内建模块 174
8.4.1 collections 174
8.4.2 base64 177
8.4.3 struct 178
8.4.4 hashlib 179
8.4.5 itertools 181
8.4.6 XML 184
8.4.7 HTMLParser 185
8.5 本章实战 186
8.5.1 创建模块 186
8.5.2 安装模块 190
8.6 本章小结 191
8.7 思考与练习 191
第9章 异常处理和程序调试 193
9.1 异常 193
9.1.1 错误与异常的概念 194
9.1.2 Python内置异常 194
9.1.3 requests模块的相关异常 196
9.1.4 用户自定义异常 197
9.2 异常处理 198
9.2.1 捕获所有异常 198
9.2.2 捕获指定异常 198
9.2.3 捕获多个异常 199
9.2.4 异常中的else 199
9.2.5 异常中的finally 200
9.2.6 使用raise语句主动抛出异常 200
9.2.7 使用traceback模块查看异常 202
9.3 程序调试 203
9.3.1 调试 203
9.3.2 断言 204
9.3.3 logging 204
9.3.4 pdb 205
9.3.5 pdb.set_trace() 206
9.3.6 IDE 207
9.4 单元测试 207
9.4.1 单元测试 207
9.4.2 运行单元测试 209
9.4.3 setUp()与tearDown()方法 210
9.5 文档测试 210
9.6 本章小结 212
9.7 思考与练习 213
第10章 目录和文件操作 215
10.1 基本文件操作 215
10.1.1 打开和关闭文件 215
10.1.2 文件模式 217
10.1.3 缓冲 218
10.2 基本文件方法 219
10.2.1 读和写 219
10.2.2 重命名 224
10.2.3 序列化和反序列化 224
10.3 目录操作 230
10.3.1 路径 231
10.3.2 目录内容 233
10.3.3 获取文件信息 234
10.3.4 重命名、移动、复制和删除文件 235
10.3.5 创建和删除目录 236
10.3 6文件通配符 236
10.4 轮换文件 237
10.5 本章小结 239
10.6 思考与练习 239
第11章 多线程编程 241
11.1 进程和线程 241
11.1.1 进程 241
11.1.2 线程 242
11.1.3 多进程和多线程 242
11.2 使用线程 243
11.2.1 全局解释器锁 243
11.2.2 退出线程 244
11.2.3 Python的线程模块 244
11.3 _thread模块 244
11.4 threading模块 247
11.4.1 守护线程 247
11.4.2 Thread对象 248
11.5 线程同步 253
11.6 Queue模块 255
11.7 线程与进程的比较 256
11.7.1 线程切换 257
11.7.2 计算密集型与IO密集型 257
11.7.3 异步IO 258
11.8 本章实战 258
11.8.1 斐波那契数列、阶乘和加和 258
11.8.2 使用队列解决生产者/消费者模型 260
11.8.3 子进程的使用 262
11.8.4 进程池的使用 262
11.8.5 多个子进程间的通信 264
11.9 本章小结 265
11.10 思考与练习 266
第12章 数据库编程 267
12.1 使用dbm创建持久字典 268
12.1.1 选择dbm模块 268
12.1.2 创建持久字典 268
12.1.3 访问持久字典 269
12.1.4 dbm与关系数据库的适用场合 271
12.2 关系数据库与SQL 272
12.2.1 SQL语言 273
12.2.2 建立数据库 275
12.2.3 定义表 276
12.3 使用Python的DB API 276
12.3.1 下载DB API模块 277
12.3.2 创建连接 277
12.3.3 数据库的CRUD操作 278
12.3.4 使用事务并提交结果 284
12.3.5 检查模块的功能和元数据 284
12.3.6 处理错误 285
12.4 使用mysql-connector 285
12.4.1 连接MySQL数据库 286
12.4.2 创建数据库 286
12.4.3 创建数据表 287
12.4.4 主键设置 288
12.4.5 插入数据 289
12.4.6 查询数据 291
12.4.7 where条件语句 292
12.4.8 排序 293
12.4.9 limit语句 294
12.4.10 删除记录 294
12.4.11 更新数据 295
12.4.12 删除数据表 296
12.5 本章小结 297
12.6 思考和练习 297
第13章 网络编程 301
13.1 网络编程概述 301
13.2 TCP/IP简介 302
13.2.1 TCP/IP协议族概述 302
13.2.2 应用层 302
13.2.3 传输层 305
13.2.4 网络层 306
13.2.5 IP地址与端口 307
13.3 发送电子邮件 308
13.3.1 Python发送邮件 308
13.3.2 Python发送HTML格式的邮件 310
13.3.3 Python发送带附件的邮件 311
13.3.4 在HTML文本中添加图片 312
13.3.5 使用第三方SMTP服务发送 313
13.4 接收Internet邮件 315
13.4.1 通过POP3下载邮件 315
13.4.2 解析邮件 316
13.5 套接字编程 318
13.5.1 TCP编程 319
13.5.2 UDP编程 322
13.6 本章小结 324
13.7 思考和练习 324
第14章 Django与投票管理系统 325
14.1 Web框架的功能 325
14.1.1 Web框架的基础功能 325
14.1.2 Web框架的其他通用功能 326
14.2 Django框架的安装 327
14.2.1 Django框架的特点 327
14.2.2 Django框架的版本 327
14.2.3 在Windows下安装Django 327
14.3 使用Django框架 329
14.3.1 创建pyqi项目 329
14.3.2 创建投票应用polls 331
14.3.3 项目的目录结构 332
14.3.4 初步配置视图和urls 332
14.4 为pyqi项目创建数据库 333
14.4.1 为pyqi项目配置数据库 334
14.4.2 为polls应用创建模型 335
14.4.3 为polls应用激活模型 336
14.4.4 测试生成的模型API 338
14.4.5 使用Django管理界面 341
14.5 完善投票应用的视图 344
14.5.1 编写视图 345
14.5.2 为视图添加模板 346
14.5.3 渲染模板 347
14.5.4 抛出Http404异常 347
14.5.5 get_object_or_404() 348
14.5.6 为投票应用使用模板 348
14.5.7 为URL名称添加名称空间 349
14.6 为投票应用定制表单 350
14.6.1 编写表单 350
14.6.2 通用视图 352
14.7 管理投票应用的静态资源 354
14.7.1 自定义应用界面和风格 354
14.7.2 管理静态资源 355
14.8 完善投票管理后台 356
14.8.1 改变后台表单 356
14.8.2 改变字段列表 360
14.8.3 改变后台界面和风格 362
14.9 打包和发布投票系统 363
14.9.1 复用的重要性 363
14.9.2 打包项目和应用 363
14.9.3 安装和卸载自定义包 367
14.9.4 发布包 367
14.10 本章小结 367
14.11 思考与练习 368
参考文献 369