第1章 Python如日中天 1
1.1 Python语言基础 2
1.1.1 编程世界的“琅琊榜” 2
1.1.2 Python为什么这么火 2
1.1.3 Python语言的特点 3
1.2 安装Python 3
1.2.1 选择版本 4
1.2.2 在Windows系统中下载并安装Python 4
1.2.3 在Mac系统中下载并安装 Python 5
1.2.4 在Linux系统中下载并安装 Python 6
1.3 Python开发工具介绍 6
1.3.1 使用IDLE 6
1.3.2 使用Emacs 7
1.4 认识第一段Python程序 10
1.4.1 编码并运行 10
1.4.2 其他运行方式 11
1.5 技术解惑 12
1.5.1 提高开发效率——安装文本编辑器 12
1.5.2 快速运行Hello World程序 12
1.5.3 在终端会话中运行Python 代码 13
1.6 课后练习 13
第2章 Python基础语法 14
2.1 缩进规则 15
2.2 注释 16
2.3 编码 17
2.3.1 字符编码 17
2.3.2 Unicode编码和UTF-8编码 17
2.3.3 Python中的编码 18
2.4 标识符和关键字 19
2.5 变量 20
2.6 输入和输出 21
2.6.1 实现输入功能 22
2.6.2 实现输出功能 22
2.7 技术解惑 23
2.7.1 使用注释时的注意事项 23
2.7.2 注意变量的命名规则和建议 23
2.7.3 注意Python语言的缩进规则 24
2.7.4 变量赋值的真正意义 24
2.7.5 解码字节流 24
2.8 课后练习 24
第3章 简单数据类型 25
3.1 Python中的数据类型 26
3.2 字符串 26
3.2.1 访问字符串中的值 26
3.2.2 更新字符串 27
3.2.3 转义字符 27
3.2.4 格式化字符串 28
3.2.5 字符串处理函数 29
3.3 数字类型 30
3.3.1 整型 30
3.3.2 浮点型 31
3.3.3 布尔型 31
3.3.4 复数型 32
3.4 技术解惑 33
3.4.1 总结整数支持的运算符 33
3.4.2 总结Python中的数学函数 33
3.4.3 字符串的格式化技巧 34
3.5 课后练习 34
第4章 运算符和表达式 35
4.1 什么是运算符和表达式 36
4.2 算术运算符和算术表达式 36
4.3 比较运算符和比较表达式 37
4.4 赋值运算符和赋值表达式 38
4.4.1 基本赋值运算符和表达式 39
4.4.2 复合赋值运算符和表达式 39
4.5 位运算符和位表达式 40
4.6 逻辑运算符和逻辑表达式 41
4.7 成员运算符和成员表达式 42
4.8 身份运算符和身份表达式 43
4.9 运算符的优先级 44
4.10 技术解惑 45
4.10.1 “==”运算符的秘密 45
4.10.2 身份运算符的特质 46
4.10.3 总结and和or的用法 46
4.10.4 is运算符和“==”运算符的区别 47
4.11 课后练习 47
第5章 条件语句 48
5.1 什么是条件语句 49
5.2 最简单的if语句 49
5.3 使用if...else语句 50
5.4 使用if...elif...else语句 51
5.5 if语句的嵌套 52
5.6 实现switch语句的功能 53
5.6.1 使用elif实现 54
5.6.2 使用字典实现 54
5.6.3 自定义编写一个类实现 55
5.7 技术解惑 56
5.7.1 剖析True和False条件判断的用法 56
5.7.2 再次提醒不支持switch语句的问题 56
5.7.3 最简洁的条件判断语句写法 56
5.8 课后练习 57
第6章 循环语句 58
6.1 使用for循环语句 59
6.1.1 基本的for循环语句 59
6.1.2 通过序列索引迭代 60
6.1.3 使用for...else循环语句 60
6.1.4 嵌套for循环语句 61
6.2 使用while循环语句 62
6.2.1 基本的while循环语句 62
6.2.2 使用while...else循环语句 63
6.2.3 死循环问题 63
6.2.4 使用while循环嵌套语句 64
6.3 使用循环控制语句 65
6.3.1 使用break语句 65
6.3.2 使用continue语句 66
6.3.3 使用pass语句 67
6.4 技术解惑 67
6.4.1 总结for循环语句 67
6.4.2 总结break和continue语句 68
6.4.3 使用while循环的注意事项 68
6.5 课后练习 68
第7章 使用列表 69
7.1 列表类型基础 70
7.1.1 创建数字列表 70
7.1.2 访问列表中的值 71
7.1.3 使用列表中的值 72
7.2 列表的基本操作 73
7.2.1 更新列表元素 73
7.2.2 插入新的元素 73
7.2.3 在列表中删除元素 75
7.3 列表排列处理 77
7.3.1 使用方法sort()对列表进行永久性排序 77
7.3.2 使用方法sorted()对列表进行临时排序 78
7.3.3 倒序输出列表中的信息 78
7.3.4 获取列表的长度 79
7.4 列表的高级操作 79
7.4.1 列表中的运算符 79
7.4.2 列表截取与拼接 80
7.4.3 列表嵌套 80
7.4.4 获取列表元素中的最大值和最小值 81
7.4.5 追加其他列表中的值 81
7.4.6 在列表中统计某元素出现的次数 82
7.4.7 清空列表中的元素 82
7.4.8 复制列表中的元素 83
7.4.9 获取列表中某个元素的索引 83
7.5 技术解惑 84
7.5.1 注意排列顺序的多样性 84
7.5.2 尝试有意引发错误 84
7.6 课后练习 84
第8章 使用元组、字典和集合 85
8.1 使用元组类型 86
8.1.1 创建并访问元组 86
8.1.2 修改元组 87
8.1.3 删除元组 88
8.1.4 元组索引和截取 88
8.1.5 使用内置方法操作元组 89
8.2 使用字典 89
8.2.1 创建并访问字典 89
8.2.2 向字典中添加数据 90
8.2.3 修改字典 91
8.2.4 删除字典中的元素 91
8.2.5 创建空字典 92
8.2.6 和字典有关的内置函数 92
8.3 遍历字典 92
8.3.1 一次性遍历所有的“键值”对 93
8.3.2 遍历字典中的所有键 93
8.3.3 按序遍历字典中的所有键 94
8.3.4 遍历字典中的所有值 94
8.4 字典嵌套 95
8.4.1 字典列表 95
8.4.2 在字典中存储字典 96
8.4.3 在字典中存储列表 97
8.5 使用其他内置方法 97
8.5.1 使用方法clear()清空字典 97
8.5.2 使用方法copy()复制字典 98
8.5.3 使用方法fromkeys()创建新字典 98
8.5.4 使用方法get()获取指定的键值 99
8.5.5 使用方法setdefault()获取指定的键值 99
8.5.6 使用方法update()修改字典 100
8.6 使用集合 100
8.7 类型转换 101
8.7.1 内置类型转换函数 101
8.7.2 类型转换综合演练 102
8.8 技术解惑 103
8.8.1 for遍历方式并不是万能的 103
8.8.2 两种字典遍历方式的性能对比 104
8.9 课后练习 104
第9章 使用函数 105
9.1 函数基础 106
9.1.1 定义函数 106
9.1.2 调用函数 107
9.2 函数的参数 107
9.2.1 形参和实参 108
9.2.2 必需参数 108
9.2.3 关键字参数 108
9.2.4 默认参数 109
9.2.5 不定长参数 109
9.2.6 按值传递参数和按引用传递参数 110
9.3 函数的返回值 111
9.3.1 返回一个简单值 111
9.3.2 可选实参 111
9.3.3 返回一个字典 112
9.4 变量的作用域 113
9.5 使用函数传递列表 114
9.5.1 访问列表中的元素 114
9.5.2 在函数中修改列表 115
9.6 使用匿名函数 115
9.7 函数和模块开发 116
9.7.1 导入整个模块文件 116
9.7.2 只导入指定的函数 117
9.7.3 使用as指定函数别名 118
9.7.4 使用as指定模块别名 118
9.7.5 导入所有函数 119
9.8 技术解惑 119
9.8.1 Python内置函数大全 119
9.8.2 一个项目引发的问题 120
9.8.3 使用递归方法展开多层列表 120
9.9 课后练习 121
第10章 面向对象(上) 122
10.1 定义并使用类 123
10.1.1 定义类 123
10.1.2 类的基本用法 123
10.2 类对象 124
10.3 类方法 124
10.3.1 定义并使用类方法 124
10.3.2 构造方法 125
10.3.3 方法调用 126
10.3.4 创建多个实例 127
10.3.5 使用私有方法 128
10.3.6 析构方法 129
10.3.7 静态方法和类方法 129
10.3.8 类的专有方法 130
10.4 类属性 131
10.4.1 认识属性 131
10.4.2 类属性和实例属性 131
10.4.3 设置属性的默认值 132
10.4.4 修改属性的值 133
10.4.5 使用私有属性 135
10.5 继承 135
10.5.1 定义子类 135
10.5.2 在子类中定义方法和属性 137
10.5.3 子类可以继续派生新类 137
10.5.4 私有属性和私有方法 138
10.5.5 多重继承 139
10.6 方法重写 140
10.7 技术解惑 141
10.7.1 究竟什么是面向对象 141
10.7.2 Python语言的面向对象编程 142
10.7.3 必须掌握的统一建模语言 143
10.7.4 构造函数和析构函数的特殊说明 143
10.8 课后练习 143
第11章 面向对象(下) 144
11.1 模块架构 145
11.1.1 最基本的模块调用 145
11.1.2 目录“___pycache___” 146
11.1.3 使用“___name___”属性 147
11.2 使用包 148
11.2.1 表示包 148
11.2.2 创建并使用包 149
11.2.3 实战演练 150
11.3 导入类 151
11.3.1 只导入一个类 151
11.3.2 导入指定的类 152
11.3.3 从一个模块中导入多个类 152
11.3.4 导入整个模块 153
11.3.5 在一个模块中导入另一个模块 153
11.4 迭代器 154
11.4.1 什么是迭代器 154
11.4.2 创建并使用迭代器 155
11.4.3 使用内置迭代器方法iter() 156
11.5 生成器 157
11.5.1 生成器的运行机制 157
11.5.2 创建生成器 158
11.5.3 注意生成器的第一次调用 159
11.5.4 使用协程重置生成器序列 160
11.6 装饰器 160
11.6.1 创建装饰器 160
11.6.2 使用装饰器装饰函数 161
11.6.3 使用装饰器装饰类 162
11.7 命名空间 163
11.7.1 命名空间的本质 163
11.7.2 查找命名空间 164
11.7.3 命名空间的生命周期 165
11.7.4 命名空间访问函数locals()与globals() 165
11.8 闭包 167
11.8.1 什么是闭包 167
11.8.2 闭包和嵌套函数 168
11.8.3 使用闭包记录函数的调用次数 168
11.8.4 使用闭包实现延迟请求 169
11.8.5 闭包和装饰器 169
11.8.6 使用闭包定义泛型函数 170
11.9 技术解惑 171
11.9.1 导入包的秘诀 171
11.9.2 无限迭代器的秘密 172
11.10 课后练习 172
第12章 文件操作处理 173
12.1 使用open()函数打开文件 174
12.2 使用File操作文件 175
12.2.1 File对象介绍 175
12.2.2 使用close()方法关闭操作 176
12.2.3 使用方法flush() 176
12.2.4 使用方法fileno() 177
12.2.5 使用方法isatty() 177
12.2.6 使用方法next() 178
12.2.7 使用方法read() 178
12.2.8 使用方法readline() 179
12.2.9 使用方法readlines() 180
12.2.10 使用方法seek() 180
12.2.11 使用方法tell() 181
12.2.12 使用方法truncate() 182
12.2.13 使用方法writelines() 182
12.3 使用OS对象 183
12.3.1 OS对象介绍 183
12.3.2 使用方法access() 185
12.3.3 使用方法chdir() 186
12.3.4 使用方法chmod() 186
12.3.5 打开、写入和关闭 187
12.3.6 打开、读取和关闭 189
12.3.7 创建目录 189
12.3.8 获取目录下的信息 190
12.3.9 修改目录 192
12.3.10 删除目录 193
12.4 其他常见的文件操作 194
12.4.1 使用fileinput模块 194
12.4.2 批量获取文件名 195
12.5 技术解惑 196
12.5.1 注意包含文件的具体范围 196
12.5.2 4点注意事项 196
12.6 课后练习 196
第13章 异常处理 197
13.1 语法错误 198
13.2 异常处理 199
13.2.1 异常的特殊之处 199
13.2.2 使用“try...except”处理异常 199
13.2.3 使用“try...except...else”处理异常 201
13.2.4 使用“try...except...finally”语句 202
13.3 抛出异常 202
13.3.1 使用raise抛出异常 203
13.3.2 使用assert语句 203
13.3.3 自定义异常 204
13.4 内置异常类 205
13.4.1 处理ZeroDivisionError异常 205
13.4.2 FileNotFoundError异常 206
13.4.3 except捕获方式 207
13.4.4 使用函数testmod() 207
13.4.5 使用单元测试函数testfile() 208
13.5 技术解惑 209
13.5.1 注意assert语句的妙用 209
13.5.2 定义清理行为 209
13.5.3 妙用预定义的清理行为 210
13.6 课后练习 210
第14章 正则表达式 211
14.1 基本语法 212
14.1.1 普通字符 212
14.1.2 非打印字符 212
14.1.3 特殊字符 213
14.1.4 限定符 216
14.1.5 定位符 217
14.1.6 限定范围和否定 218
14.1.7 运算符优先级 218
14.2 使用re模块 218
14.2.1 re模块库函数介绍 219
14.2.2 使用函数compile() 219
14.2.3 使用函数match() 220
14.2.4 使用函数search() 221
14.2.5 使用函数findall() 222
14.2.6 sub()和subn()函数 223
14.3 使用Pattern对象 224
14.4 正则表达式模式 224
14.5 技术解惑 228
14.5.1 生活中的正则表达式 228
14.5.2 为什么使用正则表达 228
14.5.3 分析函数re.match()和函数re.search()的区别 228
14.5.4 不能将限定符与定位点一起使用 228
14.6 课后练习 229
第15章 多线程开发 230
15.1 线程和进程基础 231
15.2 Python线程处理 231
15.2.1 使用thread模块 231
15.2.2 使用threading模块:threading模块介绍 232
15.2.3 使用threading模块:直接在线程中运行函数 233
15.2.4 使用threading模块:通过继承类threading.Thread创建 233
15.2.5 使用threading模块:线程等待 234
15.2.6 使用threading模块:线程同步 234
15.3 线程优先级队列模块queue 236
15.3.1 模块queue中的常用方法 236
15.3.2 基本FIFO队列 236
15.3.3 LIFO队列 237
15.3.4 优先级队列 237
15.4 使用模块subprocess创建进程 238
15.4.1 模块subprocess介绍 238
15.4.2 使用类Popen创建进程 240
15.5 技术解惑 242
15.5.1 线程带来的意义你知道吗 242
15.5.2 线程和进程的区别 244
15.6 课后练习 244
第16章 Tkinter图形化界面开发 245
16.1 Python图形化界面开发基础 246
16.1.1 GUI介绍 246
16.1.2 使用Python语言编写GUI程序 246
16.2 Tkinter开发基础 247
16.2.1 第一个Tkinter程序 247
16.2.2 向窗体中添加组件 248
16.3 Tkinter组件开发详解 248
16.3.1 Tkinter组件概览 249
16.3.2 使用按钮控件 250
16.3.3 使用文本框控件 251
16.3.4 使用菜单控件 252
16.3.5 使用标签控件 253
16.3.6 使用单选按钮和复选按钮控件 254
16.3.7 使用绘图控件 256
16.4 Tkinter库的事件 257
16.4.1 Tkinter事件基础 258
16.4.2 动态绘图程序 259
16.5 实现对话框效果 261
16.5.1 创建消息框 261
16.5.2 创建输入对话框 263
16.5.3 创建打开/保存文件对话框 264
16.5.4 创建颜色选择对话框 265
16.5.5 创建自定义对话框 265
16.6 技术解惑 267
16.6.1 格外注意方法pack()的参数 267
16.6.2 请务必注意方法grid()的参数 267
16.6.3 请务必注意方法place()的属性 267
16.7 课后练习 267
第17章 网络编程 268
17.1 网络开发基础 269
17.1.1 OSI七层网络模型 269
17.1.2 TCP/IP协议 270
17.2 套接字编程 270
17.2.1 socket()函数介绍 270
17.2.2 socket对象的内置函数和属性 271
17.2.3 使用套接字建立TCP“客户端/服务器”连接 272
17.2.4 使用套接字建立UDP“客户端/服务器”连接 274
17.3 socketserver编程 275
17.3.1 socketserver模块基础 275
17.3.2 使用socketserver创建TCP“客户端/服务器”连接 276
17.4 HTTP协议开发 277
17.4.1 使用urllib包 277
17.4.2 使用HTTP包 280
17.5 收发电子邮件 281
17.5.1 开发POP3邮件协议程序 281
17.5.2 开发SMTP邮件协议程序 283
17.6 开发FTP文件传输程序 285
17.6.1 Python和FTP 285
17.6.2 创建一个FTP文件传输客户端 287
17.7 解析XML 289
17.7.1 SAX解析方法 289
17.7.2 DOM解析方法 291
17.8 解析JSON数据 292
17.8.1 类型转换 292
17.8.2 编码和解码 293
17.9 技术解惑 294
17.9.1 详细剖析客户端/服务器编程模型 294
17.9.2 详细剖析类HTTPConnection中的方法 295
17.10 课后练习 296
第18章 数据库开发 297
18.1 操作SQLite3数据库 298
18.2 操作MySQL数据库 299
18.2.1 搭建PyMySQL环境 300
18.2.2 实现数据库连接 300
18.2.3 创建数据库表 301
18.2.4 数据库插入操作 302
18.2.5 数据库查询操作 302
18.2.6 数据库更新操作 303
18.2.7 数据库删除操作 304
18.2.8 执行事务 304
18.3 使用MariaDB数据库 305
18.3.1 搭建MariaDB数据库环境 305
18.3.2 在Python程序中使用MariaDB数据库 308
18.4 使用MongoDB数据库 309
18.4.1 搭建MongoDB环境 309
18.4.2 在Python程序中使用MongoDB数据库 310
18.5 使用适配器 312
18.6 使用ORM操作数据库 316
18.6.1 Python和ORM 316
18.6.2 使用SQLAlchemy 317
18.6.3 使用mongoengine 319
18.7 技术解惑 321
18.7.1 灵活使用查询运算符 321
18.7.2 掌握between关键字的用法 322
18.7.3 了解关联表操作的秘密 322
18.7.4 请课外学习并掌握SQL语言的知识 322
18.8 课后练习 322
第19章 Python动态Web开发基础 323
19.1 Python CGI编程 324
19.1.1 CGI介绍 324
19.1.2 搭建CGI服务器 324
19.1.3 第一个CGI程序 325
19.2 使用Tornado框架 325
19.2.1 Tornado框架介绍 326
19.2.2 Python和Tornado框架 326
19.2.3 获取请求参数 327
19.2.4 使用cookie 329
19.2.5 URL转向 330
19.2.6 使用静态资源文件 331
19.3 使用Django框架 332
19.3.1 搭建Django环境 332
19.3.2 常用的Django命令 333
19.3.3 第一个Django工程 334
19.3.4 在URL中传递参数 335
19.3.5 使用模板 337
19.3.6 使用表单 341
19.3.7 实现基本的数据库操作 342
19.3.8 使用Django后台系统开发博客系统 343
19.4 使用Flask框架 346
19.4.1 开始使用Flask框架 346
19.4.2 传递URL参数 347
19.4.3 使用session和cookie 349
19.4.4 文件上传 350
19.5 技术解惑 351
19.5.1 “客户端/服务器”开发模式 351
19.5.2 Python Web客户端开发是大势所趋 351
19.5.3 注意Python 3的变化 352
19.6 课后练习 352
第20章 使用Pygame开发游戏 353
20.1 安装Pygame 354
20.2 Pygame开发基础 355
20.2.1 Pygame框架中的模块 355
20.2.2 事件操作 356
20.2.3 显示模式设置 359
20.2.4 字体处理 359
20.2.5 像素和颜色处理 360
20.2.6 使用Surface绘制图像 362
20.2.7 使用pygame.draw绘图函数 362
20.3 开发一个俄罗斯方块游戏 364
20.3.1 规划图形 364
20.3.2 具体实现 365
20.4 技术解惑 371
20.4.1 电脑游戏开发的必备知识 371
20.4.2 如何创建Surface对象 372
20.5 课后练习 372
第21章 使用Pillow库处理图形 373
21.1 安装Pillow库 374
21.2 使用Image模块 374
21.2.1 打开和新建 374
21.2.2 混合 376
21.2.3 复制和缩放 377
21.2.4 粘贴和裁剪 378
21.2.5 格式转换 379
21.2.6 重设和旋转 380
21.2.7 分离和合并 381
21.2.8 滤镜 382
21.2.9 其他内置函数 382
21.3 使用ImageChops模块 384
21.3.1 常用的内置函数 384
21.3.2 实现图片合成 385
21.4 使用ImageEnhance模块 386
21.4.1 常用的内置函数 386
21.4.2 实现图像增强处理 386
21.5 使用ImageFilter模块 387
21.5.1 常用的内置函数 387
21.5.2 实现滤镜处理 388
21.6 使用ImageDraw模块 388
21.6.1 常用的内置函数 388
21.6.2 绘制二维图像 390
21.7 使用ImageFont模块 390
21.8 技术解惑 391
21.8.1 详细剖析ImageFont模块的内置函数 391
21.8.2 必须掌握并深入理解的几个概念 392
21.9 课后练习 392
第22章 使用Matplotlib实现数据挖掘 393
22.1 数据可视化 394
22.2 搭建Matplotlib环境 394
22.3 初级绘图 396
22.3.1 绘制点 396
22.3.2 绘制折线 396
22.3.3 设置标签文字和线条粗细 398
22.4 高级绘图 399
22.4.1 自定义散点图样式 399
22.4.2 绘制柱状图 400
22.4.3 绘制多幅子图 404
22.4.4 绘制曲线 406
22.5 绘制随机漫步图 411
22.5.1 在Python程序中生成随机漫步数据 411
22.5.2 在Python程序中绘制随机漫步图 413
22.6 绘制其他样式的图 414
22.6.1 绘制三维图 414
22.6.2 绘制波浪图 415
22.6.3 绘制散点图 416
22.6.4 绘制等高线图 416
22.6.5 绘制饼状图 417
22.7 技术解惑 418
22.7.1 充分利用官方资源 418
22.7.2 如何实现子图 418
22.8 课后练习 419
第23章 大数据实战——抓取数据并分析 420
23.1 爬虫抓取 421
23.1.1 检测“Redis”的状态 421
23.1.2 账号模拟登录 421
23.1.3 实现具体抓取功能 423
23.2 大数据分析 428