第 1 章 数字、字符串和元组 1
1.1 引言 1
1.2 创建有意义的名称和使用变量 2
1.3 使用大整数和小整数 5
1.4 在浮点数、小数和分数之间选择 8
1.5 在真除法和floor除法之间选择 13
1.6 重写不可变的字符串 15
1.7 使用正则表达式解析字符串 19
1.8 使用"template".format()构建复杂的字符串 22
1.9 通过字符列表构建复杂的字符串 25
1.10 使用键盘上没有的Unicode字符 27
1.11 编码字符串——创建ASCII和UTF-8字节 29
1.12 解码字节——如何根据字节获得正确的字符 31
1.13 使用元组 33
第 2 章 语句与语法 36
2.1 引言 36
2.2 编写Python脚本和模块文件——语法基础 37
2.3 编写长行代码 40
2.4 添加描述和文档 44
2.5 在文档字符串中编写RST标记 48
2.6 设计复杂的if…elif链 51
2.7 设计正确终止的while语句 54
2.8 避免break语句带来的潜在问题 58
2.9 利用异常匹配规则 61
2.10 避免except:子句带来的潜在问题 64
2.11 使用raise from语句链接异常 65
2.12 使用with语句管理上下文 67
第 3 章 函数定义 70
3.1 引言 70
3.2 使用可选参数设计函数 70
3.3 使用灵活的关键字参数 75
3.4 使用*分隔符强制使用关键字参数 77
3.5 编写显式的函数参数类型 80
3.6 基于偏函数选择参数顺序 84
3.7 使用RST标记编写清晰的文档字符串 87
3.8 围绕Python栈限制设计递归函数 91
3.9 根据脚本/库转换规则编写可重用脚本 94
第 4 章 内置数据结构——列表、集、字典 98
4.1 引言 98
4.2 选择数据结构 99
4.3 构建列表——字面量、append()和解析式 102
4.4 切片和分割列表 106
4.5 从列表中删除元素——del语句、remove()、pop()和filter() 109
4.6 反转列表的副本 114
4.7 使用set方法和运算符 116
4.8 从集中移除元素——remove()、pop()和差集 120
4.9 创建字典——插入和更新 122
4.10 从字典中移除元素——pop()方法和del语句 126
4.11 控制字典键的顺序 128
4.12 处理doctest示例中的字典和集 130
4.13 理解变量、引用和赋值 132
4.14 制作对象的浅副本和深副本 134
4.15 避免可变默认值作为函数参数 137
第 5 章 用户输入和输出 141
5.1 引言 141
5.2 使用print()函数的功能 141
5.3 使用input()和getpass()收集用户输入 145
5.4 使用"format".format_map(vars())进行调试 150
5.5 使用argparse模块获取命令行输入 151
5.6 使用cmd模块创建命令行应用程序 156
5.7 使用操作系统环境设置 161
第 6 章 类和对象的基础知识 165
6.1 引言 165
6.2 使用类封装数据和操作 166
6.3 设计操作类 169
6.4 设计数据类 174
6.5 使用__slots__优化对象 177
6.6 使用更复杂的集合 180
6.7 扩展集合——统计数据的列表 183
6.8 使用特性计算惰性属性 186
6.9 使用可设置的特性更新及早属性 190
第 7 章 高级类设计 195
7.1 引言 195
7.2 在继承和扩展之间选择——is-a问题 195
7.3 通过多重继承分离关注点 201
7.4 利用Python的鸭子类型 205
7.5 管理全局单例对象 208
7.6 使用更复杂的结构——列表映射 212
7.7 创建具有可排序对象的类 214
7.8 定义有序集合 218
7.9 从映射列表中删除元素 223
第 8 章 函数式编程和反应式编程 228
8.1 引言 228
8.2 使用yield语句编写生成器函数 229
8.3 使用生成器表达式栈 234
8.4 将转换应用于集合 241
8.5 选择子集——三种过滤方式 244
8.6 汇总集合——如何归约 248
8.7 组合映射和归约转换 252
8.8 实现there exists处理 257
8.9 创建偏函数 260
8.10 使用不可变数据结构简化复杂算法 265
8.11 使用yield from语句编写递归生成器函数 269
第 9 章 输入/输出、物理格式和逻辑布局 274
9.1 引言 274
9.2 使用pathlib模块处理文件名 275
9.3 使用上下文管理器读取和写入文件 281
9.4 替换文件,同时保留以前的版本 284
9.5 使用CSV模块读取带分隔符的文件 287
9.6 使用正则表达式读取复杂格式 291
9.7 读取JSON文档 295
9.8 读取XML文档 301
9.9 读取HTML文档 305
9.10 将CSV模块的DictReader更新为namedtuple读取器 310
9.11 将CSV模块的DictReader更新为namespace读取器 314
9.12 使用多个上下文读取和写入文件 317
第 10 章 统计编程和线性回归 322
10.1 引言 322
10.2 使用内置统计库 322
10.3 计算Counter对象中值的平均值 329
10.4 计算相关系数 332
10.5 计算回归参数 336
10.6 计算自相关 339
10.7 确认数据是随机的——零假设 344
10.8 查找异常值 348
10.9 通过一次遍历分析多个变量 353
第 11 章 测试 359
11.1 引言 359
11.2 使用文档字符串进行测试 360
11.3 测试抛出异常的函数 365
11.4 处理常见的doctest问题 368
11.5 创建单独的测试模块和包 372
11.6 组合unittest测试和doctest测试 378
11.7 涉及日期或时间的测试 381
11.8 涉及随机性的测试 385
11.9 模拟外部资源 388
第 12 章 Web服务 398
12.1 引言 398
12.2 使用WSGI实现Web服务 400
12.3 使用Flask框架实现RESTful API 408
12.4 解析请求中的查询字符串 414
12.5 使用urllib发送REST请求 418
12.6 解析URL路径 424
12.7 解析JSON请求 433
12.8 实施Web服务认证 441
第 13 章 应用程序集成 455
13.1 引言 455
13.2 查找配置文件 456
13.3 使用YAML编写配置文件 462
13.4 使用Python赋值语句编写配置文件 468
13.5 使用Python类定义编写配置文件 470
13.6 设计可组合的脚本 475
13.7 使用logging模块监控和审计输出 481
13.8 将两个应用程序组合为一个复合应用程序 488
13.9 使用命令设计模式组合多个应用程序 494
13.10 管理复合应用程序中的参数和配置 497
13.11 包装和组合CLI应用程序 501
13.12 包装程序并检查输出 506
13.13 控制复杂的步骤序列 509
· · · · · · (
收起)