第一篇 Python基础 2
第1章 开篇综述 2
1.1 Python语言历史 3
1.2 Python语言设计哲学——Python之禅 3
1.3 Python语言特点 4
1.4 Python语言应用前景 5
1.5 如何获得帮助 6
第2章 搭建开发环境 7
2.1 搭建Python环境 7
2.2 PyCharm开发工具 9
2.2.1 下载和安装 10
2.2.2 设置Python解释器 11
2.3 Eclipse+PyDev开发工具 12
2.3.1 Eclipse下载和安装 13
2.3.2 安装PyDev插件 15
2.3.3 设置Python解释器 16
2.3.4 设置UTF-8编码 17
2.4 Visual Studio Code开发工具 18
2.5 文本编辑工具 21
本章小结 21
第3章 第一个Python程序 22
3.1 使用Python Shell实现 22
3.2 使用PyCharm实现 24
3.2.1 创建项目 24
3.2.2 创建Python代码文件 25
3.2.3 编写代码 26
3.2.4 运行程序 26
3.3 使用Eclipse+PyDev插件实现 27
3.3.1 创建项目 27
3.3.2 创建Python代码文件 27
3.3.3 运行程序 28
3.4 使用Visual Studio Code实现 29
3.4.1 创建Python代码文件 29
3.4.2 运行程序 30
3.5 文本编辑工具+Python解释器实现 31
3.5.1 编写代码 31
3.5.2 运行程序 32
3.6 代码解释 32
本章小结 33
第4章 Python语法基础 34
4.1 标识符和关键字 34
4.1.1 标识符 34
4.1.2 关键字 34
4.2 变量和常量 35
4.2.1 变量 35
4.2.2 常量 35
4.3 注释 36
4.4 语句 36
4.5 模块 37
4.6 包 39
4.6.1 创建包 39
4.6.2 导入包 39
本章小结 40
第5章 Python编码规范 41
5.1 命名规范 41
5.2 注释规范 42
5.2.1 文件注释 42
5.2.2 文档注释 42
5.2.3 代码注释 44
5.2.4 使用TODO注释 45
5.3 导入规范 46
5.4 代码排版 47
5.4.1 空行 47
5.4.2 空格 48
5.4.3 缩进 49
5.4.4 断行 49
本章小结 50
第6章 数据类型 51
6.1 数字类型 51
6.1.1 整数类型 51
6.1.2 浮点类型 52
6.1.3 复数类型 52
6.1.4 布尔类型 52
6.2 数字类型相互转换 53
6.2.1 隐式类型转换 53
6.2.2 显式类型转换 54
6.3 字符串类型 54
6.3.1 字符串表示方式 54
6.3.2 字符串格式化 57
6.3.3 字符串查找 58
6.3.4 字符串与数字相互转换 60
本章小结 61
第7章 运算符 62
7.1 算术运算符 62
7.1.1 一元运算符 62
7.1.2 二元运算符 62
7.2 关系运算符 64
7.3 逻辑运算符 65
7.4 位运算符 66
7.5 赋值运算符 68
7.6 其他运算符 69
7.6.1 同一性测试运算符 69
7.6.2 成员测试运算符 71
7.7 运算符优先级 71
本章小结 72
第8章 控制语句 73
8.1 分支语句 73
8.1.1 if结构 73
8.1.2 if-else结构 74
8.1.3 elif结构 75
8.1.4 三元运算符替代品——条件表达式 75
8.2 循环语句 76
8.2.1 while语句 76
8.2.2 for语句 77
8.3 跳转语句 78
8.3.1 break语句 78
8.3.2 continue语句 79
8.3.3 while和for中的else语句 79
8.4 使用范围 80
本章小结 81
第二篇 Python进阶 84
第9章 数据结构 84
9.1 元组 84
9.1.1 序列 84
9.1.2 创建元组 88
9.1.3 访问元组 88
9.1.4 遍历元组 88
9.2 列表 89
9.2.1 列表创建 89
9.2.2 追加元素 90
9.2.3 插入元素 91
9.2.4 替换元素 91
9.2.5 删除元素 91
9.2.6 其他常用方法 92
9.2.7 列表推导式 93
9.3 集合 94
9.3.1 创建可变集合 94
9.3.2 修改可变集合 95
9.3.3 遍历集合 95
9.3.4 不可变集合 96
9.3.5 集合推导式 97
9.4 字典 97
9.4.1 创建字典 98
9.4.2 修改字典 99
9.4.3 访问字典 100
9.4.4 遍历字典 101
9.4.5 字典推导式 101
本章小结 102
第10章 函数式编程 103
10.1 定义函数 103
10.2 函数参数 104
10.2.1 使用关键字参数调用函数 104
10.2.2 参数默认值 104
10.2.3 可变参数 105
10.3 函数返回值 106
10.3.1 无返回值函数 106
10.3.2 多返回值函数 107
10.4 函数变量作用域 108
10.5 生成器 109
10.6 嵌套函数 111
10.7 函数式编程基础 112
10.7.1 函数类型 112
10.7.2 Lambda表达式 113
10.7.3 三大基础函数 114
本章小结 115
第11章 面向对象编程 116
11.1 面向对象概述 116
11.2 面向对象三个基本特性 116
11.2.1 封装性 116
11.2.2 继承性 116
11.2.3 多态性 117
11.3 类和对象 117
11.3.1 定义类 117
11.3.2 创建和使用对象 117
11.3.3 实例变量 118
11.3.4 类变量 119
11.3.5 构造方法 120
11.3.6 实例方法 121
11.3.7 类方法 122
11.3.8 静态方法 123
11.4 封装性 123
11.4.1 私有变量 123
11.4.2 私有方法 124
11.4.3 定义属性 125
11.5 继承性 127
11.5.1 继承概念 127
11.5.2 重写方法 128
11.5.3 多继承 128
11.6 多态性 129
11.6.1 多态概念 130
11.6.2 类型检查 131
11.6.3 鸭子类型 131
11.7 Python根类——object 132
11.7.1 _str_()方法 133
11.7.2 对象比较方法 133
11.8 枚举类 134
11.8.1 定义枚举类 134
11.8.2 限制枚举类 135
11.8.3 使用枚举类 135
本章小结 136
第12章 异常处理 137
12.1 异常问题举例 137
12.2 异常类继承层次 138
12.3 常见异常 139
12.3.1 AttributeError异常 139
12.3.2 OSError异常 140
12.3.3 IndexError异常 140
12.3.4 KeyError异常 141
12.3.5 NameError异常 141
12.3.6 TypeError异常 141
12.3.7 ValueError异常 142
12.4 捕获异常 142
12.4.1 try-except语句 142
12.4.2 多except代码块 143
12.4.3 try-except语句嵌套 145
12.4.4 多重异常捕获 146
12.5 异常堆栈跟踪 147
12.6 释放资源 148
12.6.1 finally代码块 148
12.6.2 else代码块 149
12.6.3 with as代码块自动资源管理 150
12.7 自定义异常类 151
12.8 显式抛出异常 151
本章小结 152
第13章 常用模块 153
13.1 math模块 153
13.1.1 舍入函数 153
13.1.2 幂和对数函数 154
13.1.3 三角函数 154
13.2 random模块 155
13.3 datetime模块 156
13.3.1 datetime、date和time类 157
13.3.2 日期时间计算 160
13.3.3 日期时间格式化和解析 160
13.3.4 时区 162
13.4 logging日志模块 163
13.4.1 日志级别 163
13.4.2 日志信息格式化 165
13.4.3 日志重定位 166
13.4.4 使用配置文件 166
本章小结 168
第14章 正则表达式 169
14.1 正则表达式字符串 169
14.1.1 元字符 169
14.1.2 字符转义 170
14.1.3 开始与结束字符 170
14.2 字符类 171
14.2.1 定义字符类 171
14.2.2 字符类取反 172
14.2.3 区间 172
14.2.4 预定义字符类 173
14.3 量词 174
14.3.1 量词的使用 174
14.3.2 贪婪量词和懒惰量词 175
14.4 分组 176
14.4.1 分组的使用 176
14.4.2 分组命名 177
14.4.3 反向引用分组 178
14.4.4 非捕获分组 179
14.5 re模块 180
14.5.1 search()和match()函数 180
14.5.2 findall()和finditer()函数 181
14.5.3 字符串分割 182
14.5.4 字符串替换 182
14.6 编译正则表达式 183
14.6.1 已编译正则表达式对象 184
14.6.2 编译标志 185
本章小结 188
第15章 文件操作与管理 189
15.1 文件操作 189
15.1.1 打开文件 189
15.1.2 关闭文件 191
15.1.3 文本文件读写 192
15.1.4 二进制文件读写 193
15.2 os模块 193
15.3 os.path模块 194
本章小结 196
第三篇 Python高级实用库与框架 198
第16章 数据交换格式 198
16.1 CSV数据交换格式 199
16.1.1 reader()函数 199
16.1.2 writer()函数 200
16.2 XML数据交换格式 201
16.2.1 XML文档结构 201
16.2.2 解析XML文档 203
16.2.3 XPath 205
16.3 JSON数据交换格式 207
16.3.1 JSON文档结构 207
16.3.2 JSON数据编码 208
16.3.3 JSON数据解码 210
16.4 配置文件 212
16.4.1 配置文件结构 212
16.4.2 读取配置文件 212
16.4.3 写入配置文件 214
本章小结 214
第17章 数据库编程 215
17.1 数据持久化技术概述 215
17.2 MySQL数据库管理系统 215
17.2.1 数据库安装与配置 216
17.2.2 连接MySQL服务器 220
17.2.3 常见的管理命令 221
17.3 Python DB-API 224
17.3.1 建立数据连接 225
17.3.2 创建游标 226
17.4 案例:MySQL数据库CRUD操作 227
17.4.1 安装PyMySQL模块 227
17.4.2 数据库编程的一般过程 228
17.4.3 数据查询操作 228
17.4.4 数据修改操作 231
17.5 NoSQL数据存储 234
17.5.1 dbm数据库的打开和关闭 234
17.5.2 dbm数据存储 234
本章小结 235
第18章 网络编程 236
18.1 网络基础 236
18.1.1 网络结构 236
18.1.2 TCP/IP协议 237
18.1.3 IP地址 237
18.1.4 端口 238
18.2 TCP Socket低层次网络编程 238
18.2.1 TCP Socket通信概述 238
18.2.2 TCP Socket通信过程 238
18.2.3 TCP Socket编程API 239
18.2.4 案例:简单聊天工具 240
18.2.5 案例:文件上传工具 242
18.3 UDP Socket低层次网络编程 243
18.3.1 UDP Socket编程API 243
18.3.2 案例:简单聊天工具 244
18.3.3 案例:文件上传工具 245
18.4 访问互联网资源 247
18.4.1 URL概念 247
18.4.2 HTTP/HTTPS协议 247
18.4.3 使用urllib库 248
18.4.4 发送GET请求 248
18.4.5 发送POST请求 249
18.4.6 实例:Downloader 250
本章小结 250
第19章 wxPython图形用户界面编程 251
19.1 Python图形用户界面开发工具包 251
19.2 wxPython安装 251
19.3 wxPython基础 252
19.3.1 wxPython类层次结构 252
19.3.2 第一个wxPython程序 253
19.3.3 wxPython界面构建层次结构 256
19.4 事件处理 257
19.4.1 一对一事件处理 257
19.4.2 一对多事件处理 258
19.4.3 示例:鼠标事件处理 259
19.5 布局管理 260
19.5.1 Box布局器 261
19.5.2 StaticBox布局 264
19.5.3 Grid布局 265
19.5.4 FlexGrid布局 266
19.6 wxPython控件 268
19.6.1 静态文本和按钮 268
19.6.2 文本输入控件 269
19.6.3 复选框和单选按钮 270
19.6.4 下拉列表 272
19.6.5 列表 274
19.6.6 静态图片控件 275
19.7 高级窗口 277
19.7.1 分隔窗口 277
19.7.2 使用树 278
19.7.3 使用网格 281
19.8 使用菜单 284
19.9 使用工具栏 286
本章小结 288
第20章 Python多线程编程 289
20.1 基础知识 289
20.1.1 进程 289
20.1.2 线程 290
20.2 threading模块 290
20.3 创建线程 291
20.3.1 自定义函数作为线程体 291
20.3.2 继承Thread线程类实现线程体 293
20.4 线程管理 294
20.4.1 等待线程结束 294
20.4.2 线程停止 296
20.5 线程安全 297
20.5.1 临界资源问题 297
20.5.2 多线程同步 299
20.6 线程间通信 301
20.6.1 使用Condition实现线程间通信 301
20.6.2 使用Event实现线程间通信 305
本章小结 306
第四篇 项目实战 308
第21章 项目实战1:网络爬虫与爬取股票数据 308
21.1 网络爬虫技术概述 308
21.1.1 网络通信技术 308
21.1.2 多线程技术 308
21.1.3 数据交换技术 308
21.1.4 Web前端技术 309
21.1.5 数据分析技术 310
21.1.6 数据存储技术 311
21.2 爬取数据 311
21.2.1 网页中静态和动态数据 311
21.2.2 使用urllib爬取数据 312
21.2.3 使用Selenium爬取数据 316
21.3 分析数据 319
21.3.1 使用正则表达式 319
21.3.2 使用BeautifulSoup库 321
21.4 项目实战:爬取纳斯达克股票数据 323
21.4.1 爬取数据 323
21.4.2 检测数据是否更新 323
21.4.3 分析数据 326
21.4.4 保存数据到数据库 327
21.4.5 爬虫工作计划任务 330
第22章 项目实战2:数据可视化与股票数据分析 334
22.1 使用Matplotlib绘制图表 334
22.1.1 安装Matplotlib 334
22.1.2 图表基本构成要素 335
22.1.3 绘制折线图 336
22.1.4 绘制柱状图 337
22.1.5 绘制饼状图 338
22.1.6 绘制散点图 339
22.1.7 绘制子图表 340
22.2 项目实战:纳斯达克股票数据分析 343
22.2.1 从数据库提取股票数据 343
22.2.2 绘制股票成交量折线图 344
22.2.3 绘制股票OHLC柱状图 345
22.2.4 绘制股票K线图 348
第23章 项目实战3:PetStore宠物商店项目 352
23.1 系统分析与设计 352
23.1.1 项目概述 352
23.1.2 需求分析 353
23.1.3 原型设计 353
23.1.4 数据库设计 355
23.1.5 架构设计 357
23.1.6 系统设计 357
23.2 任务1:创建数据库 359
23.2.1 迭代1.1:安装和配置MySQL数据库 359
23.2.2 迭代1.2:编写数据库DDL脚本 359
23.2.3 迭代1.3:插入初始数据到数据库 360
23.3 任务2:初始化项目 360
23.3.1 迭代2.1:添加资源图片 361
23.3.2 迭代2.2:添加包 361
23.4 任务3:编写数据持久层代码 361
23.4.1 迭代3.1:数据库配置文件 361
23.4.2 迭代3.2:编写DAO基类 361
23.4.3 迭代3.3:用户管理DAO 362
23.4.4 迭代3.4:商品管理DAO 363
23.4.5 迭代3.5:订单管理DAO 366
23.4.6 迭代3.6:订单明细管理DAO 367
23.5 任务4:编写表示层代码 368
23.5.1 迭代4.1:编写启动模块 368
23.5.2 迭代4.2:编写自定义窗口类——MyFrame 368
23.5.3 迭代4.3:用户登录窗口 369
23.5.4 迭代4.4:商品列表窗口 372
23.5.5 迭代4.5:商品购物车窗口 379
23.6 任务5:发布可执行文件 386
23.6.1 迭代5.1:处理TODO任务 386
23.6.2 迭代5.2:发布为可执行文件 386
第24章 项目实战4:开发Python版QQ2006聊天工具 390
24.1 系统分析与设计 390
24.1.1 项目概述 390
24.1.2 需求分析 390
24.1.3 原型设计 392
24.1.4 数据库设计 393
24.1.5 网络拓扑图 394
24.1.6 系统设计 395
24.2 任务1:创建服务器端数据库 395
24.2.1 迭代1.1:安装和配置MySQL数据库 395
24.2.2 迭代1.2:编写数据库DDL脚本 395
24.2.3 迭代1.3:插入初始数据到数据库 396
24.3 任务2:初始化项目 397
24.3.1 迭代2.1:添加资源图片 397
24.3.2 迭代2.2:添加包 397
24.4 任务3:编写服务器端数据持久层 397
24.4.1 迭代3.1:数据库配置文件 397
24.4.2 迭代3.2:编写base dao模块 397
24.4.3 迭代3.3:编写用户管理DAO类 398
24.5 任务4:客户端UI实现 400
24.5.1 迭代4.1:编写my_frame模块 400
24.5.2 迭代4.2:登录窗口实现 401
24.5.3 迭代4.3:好友列表窗口实现 404
24.5.4 迭代4.4:聊天窗口实现 407
24.6 任务5:用户登录过程实现 409
24.6.1 迭代5.1:客户端启动 409
24.6.2 迭代5.2:客户端登录编程 410
24.6.3 迭代5.3:服务器端启动 412
24.6.4 迭代5.4:服务器端验证编程 413
24.7 任务6:刷新好友列表 415
24.7.1 迭代6.1:刷新好友列表服务器端编程 415
24.7.2 迭代6.2:刷新好友列表客户端编程 416
24.8 任务7:聊天过程实现 419
24.8.1 迭代7.1:客户端用户1向服务器发送消息 420
24.8.2 迭代7.2:服务器端接收用户1消息与转发给用户3消息 421
24.8.3 迭代7.3:客户端用户3接收用户1消息 422
24.9 任务8:用户下线 423
24.9.1 迭代8.1:客户端编程 424
24.9.2 迭代8.2:服务器端编程 425