第 1章 Python概述 1
1.1 编程预备知识 2
1.2 走近Python 3
1.3 关于Python 4
可移植性 4
一致性 4
开发人员的效率 4
广泛的程序库 5
软件质量 5
软件集成 5
满足感和乐趣 5
1.4 Python有什么缺点吗? 5
1.5 当前的Python用户 6
1.6 安装环境 6
1.6.1 Python 2和Python 3 6
1.7 安装Python 7
1.7.1 安装Python解释器 7
1.7.2 关于虚拟环境 9
1.7.3 第 一个虚拟环境 10
1.7.4 安装第三方程序库 12
1.7.5 控制台是我们的好帮手 13
1.8 怎样运行Python程序 13
1.8.1 运行Python脚本 13
1.8.2 在交互式shell中运行Python 14
1.8.3 以服务的形式运行Python 15
1.8.4 以GUI应用程序的形式运行Python 15
1.9 Python代码的组织形式 16
1.9.1 使用模块和程序包 17
1.10 Python的执行模型 18
1.10.1 名称和名字空间 19
1.10.2 作用域 20
1.10.3 对象和类 23
1.11 编写优质代码的指导原则 25
1.12 Python的文化 26
1.13 关于IDE的说明 27
1.14 总结 28
第 2章 内置的数据类型 29
2.1 一切皆是对象 29
2.2 可变还是不可变?这个是
问题 30
2.3 数值 32
2.3.1 整数 32
2.3.2 布尔值 34
2.3.3 实数 35
2.3.4 复数 36
2.3.5 分数和小数 36
2.4 不可变序列 37
2.4.1 字符串和bytes(字节) 37
2.4.2 元组 41
2.5 可变序列 42
2.5.1 列表 42
2.5.2 bytearray(字节数组) 45
2.6 集合类型 46
2.7 映射类型—字典 48
2.8 数据类型 51
2.8.1 日期和时间 52
2.8.2 collections模块 56
2.9 枚举 60
2.10 最后的考虑 60
2.10.1 小值缓存 61
2.10.2 如何选择数据结构 61
2.10.3 关于索引和截取 62
2.10.4 关于名称 63
2.11 总结 64
第3章 迭代和决策 65
3.1 条件编程 65
3.1.1 一种特殊的else:elif 66
3.1.2 三元操作符 68
3.2 循环 69
3.2.1 for循环 69
3.2.2 迭代器和可迭代对象 71
3.2.3 对多个序列进行迭代 72
3.2.4 while循环 74
3.2.5 break和continue语句 76
3.2.6 一种特殊的else子句 77
3.3 赋值表达式 79
3.3.1 语句和表达式 79
3.3.2 使用海象操作符 80
3.3.3 告诫 81
3.4 综合应用 81
3.4.1 质数生成器 81
3.4.2 应用折扣 83
3.5 itertools模块速览 86
3.5.1 无限迭代器 86
3.5.2 终止于最短输入序列的
迭代器 86
3.5.3 组合迭代器 87
3.6 总结 88
第4章 函数,代码的基本构件 89
4.1 为什么要使用函数? 90
4.1.1 减少代码的重复 90
4.1.2 分割复杂任务 91
4.1.3 隐藏实现细节 91
4.1.4 提高可读性 92
4.1.5 提高可追踪性 92
4.2 作用域和名称解析 93
4.2.1 global和nonlocal语句 95
4.3 输入参数 96
4.3.1 实际参数的传递 97
4.3.2 形式参数名称的赋值 97
4.3.3 修改可变对象 98
4.3.4 传递实际参数 99
4.3.5 定义形式参数 101
4.4 返回值 109
4.4.1 返回多个值 110
4.5 一些实用的提示 111
4.6 递归函数 112
4.7 匿名函数 113
4.8 函数的属性 114
4.9 内置函数 115
4.10 代码的文档和注释 115
4.11 导入对象 116
4.11.1 相对导入 117
4.12 最后一个例子 118
4.13 总结 119
第5章 解析和生成器 120
5.1 map、zip、filter函数 121
5.1.1 map 121
5.1.2 zip 124
5.1.3 filter 125
5.2 解析 125
5.2.1 嵌套的解析 126
5.2.2 对解析进行过滤 127
5.2.3 字典解析 129
5.2.4 集合解析 130
5.3 生成器 130
5.3.1 生成器函数 130
5.3.2 next的幕后 133
5.3.3 yield from表达式 135
5.3.4 生成器表达式 136
5.4 性能上的考虑 138
5.5 不要过度使用解析和生成器 141
5.6 名称局部化 143
5.7 内置的生成行为 144
5.8 最后一个例子 145
5.9 总结 146
第6章 面向对象编程、装饰器和
迭代器 148
6.1 装饰器 148
6.1.1 装饰器工厂 153
6.2 面向对象编程(OOP) 155
6.2.1 最简单的Python类 155
6.2.2 类和对象的名字空间 156
6.2.3 属性屏蔽 157
6.2.4 使用self变量 158
6.2.5 实例的初始化 159
6.2.6 OOP与代码复用有关 159
6.2.7 访问基类 164
6.2.8 多重继承 165
6.2.9 类方法和静态方法 169
6.2.10 私有方法和名称改写 173
6.2.11 property装饰器 175
6.2.12 cached_property装饰器 176
6.2.13 操作符重载 178
6.2.14 多态——简单说明 178
6.2.15 数据类 179
6.3 编写自定义的迭代器 180
6.4 总结 181
第7章 异常和上下文管理器 182
7.1 异常 182
7.1.1 触发异常 184
7.1.2 自定义异常类 184
7.1.3 回溯 184
7.1.4 处理异常 185
7.1.5 不仅仅用于错误 188
7.2 上下文管理器 189
7.2.1 基于类的上下文管理器 191
7.2.2 基于生成器的上下文
管理器 192
7.3 总结 194
第8章 文件和数据持久化 195
8.1 操作文件和目录 195
8.1.1 打开文件 196
8.1.2 读取和写入文件 197
8.1.3 检查文件和目录是否存在 199
8.1.4 对文件和目录进行操作 200
8.1.5 临时文件和临时目录 202
8.1.6 目录的内容 203
8.1.7 文件和目录的压缩 204
8.2 数据交换格式 204
8.2.1 使用JSON 205
8.3 I/O、流和请求 211
8.3.2 创建HTTP请求 212
8.4 对磁盘上的数据进行持久化 214
8.4.1 使用pickle对数据进行
序列化 214
8.4.2 使用shelve保存数据 216
8.4.3 把数据保存到数据库 217
8.5 总结 222
第9章 加密与令牌 223
9.1 加密的需要 223
9.1.1 加密的实用指导原则 224
9.2 Hashlib模块 224
9.3 HMAC模块 226
9.4 secrets模块 227
9.4.1 随机数 227
9.4.2 令牌的生成 228
9.4.3 摘要的比较 229
9.5 JSON Web令牌 230
9.5.1 已注册的诉求 232
9.5.2 使用非对称(公钥)算法 235
9.6 参考阅读 235
9.7 总结 236
第 10章 测试 237
10.1 对应用程序进行测试 237
10.1.1 测试结构详解 239
10.1.2 测试的指导原则 240
10.1.3 单元测试 241
10.1.4 测试一个CSV生成器 243
10.2 测试驱动的开发 255
10.3 总结 257
第 11章 调试和性能分析 258
11.1 调试技巧 259
11.1.1 用print进行调试 259
11.1.2 用自定义函数进行调试 259
11.1.3 使用Python调试器 261
11.1.4 检查日志 263
11.1.5 其他方法 266
11.2 故障排除指南 267
11.2.1 在哪里检查 267
11.2.2 使用测试进行调试 268
11.2.4 监视 268
11.3 对Python进行性能分析 268
11.3.1 什么时候进行性能分析? 271
11.3.2 测量执行时间 271
11.4 总结 272
第 12章 GUI和脚本 273
12.1 第 一种方法:脚本 275
12.1.1 导入部分 275
12.1.2 解析参数 276
12.1.3 业务逻辑 278
12.2 第二种方法:GUI应用
程序 281
12.2.1 导入部分 282
12.2.2 布局逻辑 283
12.2.3 业务逻辑 286
12.2.4 如何改进这个应用程序? 291
12.3 下一步的方向 292
12.3.1 turtle模块 292
12.3.2 wxPython、PyQt和
PyGTK 292
12.3.3 最小惊讶原则 293
12.3.4 线程方面的考虑 293
12.4 总结 293
第 13章 数据科学简介 295
13.1 IPython和Jupyter Notebook 296
13.1.1 使用Anaconda 297
13.1.2 启动Notebook 298
13.2 处理数据 298
13.2.1 设置Notebook 299
13.2.2 准备数据 299
12.2.3 清理数据 303
13.2.4 创建DataFrame 304
13.2.5 把DataFrame保存到文件 311
13.2.6 显示结果 311
13.3 下一步的方向 316
13.4 总结 317
第 14章 API开发 318
14.1 什么是Web? 318
14.1.1 Web的工作方式 319
14.1.2 响应状态码 320
14.2 类型提示:概述 320
14.2.1 类型提示的优点 321
14.2.2 类型提示的精华 322
14.3 API简介 324
14.3.1 什么是API 324
14.3.2 API的用途 324
14.3.3 API协议 325
14.3.4 API数据交换格式 325
14.4 铁路API 326
14.4.1 对数据库进行建模 327
14.4.2 主要的设置和配置 332
14.4.3 车站端点 333
14.4.4 用户认证 345
14.4.5 创建API文档 347
14.5 消费API 348
14.6 未来的方向 353
14.7 总结 354
第 15章 打包Python应用程序 355
15.1 Python包索引 355
15.2 列车调度项目 357
15.3 用setuptools进行打包 361
15.3.1 必要的文件 361
15.3.2 程序包的元数据 364
15.3.3 定义程序包的内容 369
15.3.4 指定依赖关系 371
15.3.5 入口 373
15.4 生成和发布程序包 374
15.4.1 生成 374
15.4.2 发布 375
15.5 启动新项目的建议 377
15.6 其他工具 377
15.7 进一步的学习方向 378
15.8 总结 378