描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302588221
专业质量的代码不仅运行时没有错误,而且整洁、易读、易维护。想从一个有能力的Python程序员成长为专业的开发人员,读者需要学习编码风格、应用程序设计和开发流程的行业标准。这正是本书的特色与要讲解的内容。
本书教会读者设计和编写可理解、可维护和可扩展的专业软件。作者Dane Hillard是一位Python专业人士,帮助过许多开发人员完成Python项目的设计和编写,他知道在此过程中需要做些什么。他通过有用的示例和练习,让读者明白在什么时机,如何将代码模块化,如何通过降低复杂度来提高代码质量,以及为什么这样做等。遵循这些核心原则,所编写的代码将更易于自己和他人阅读、维护和重用。
主要内容 组织大型Python项目 实现合适的抽象级别 编写整洁并可重用的代码 继承和组合 测试和性能的注意事项
第Ⅰ部分 为什么学习Python
第1 章 Python 总览 3
1.1 Python 是一种企业语言 5
1.1.1 时代在改变 5
1.1.2 我喜欢Python 的原因 5
1.2 Python 是一种教学语言 6
1.3 设计是一个过程 6
1.3.1 用户体验 8
1.3.2 你以前接触过的情况 9
1.4 设计更好的软件 10
1.4.1 软件设计注意事项 10
1.4.2 “有机”增长的软件 11
1.5 何时投资设计 13
1.6 新的开始 14
1.7 设计是平等的 15
1.8 如何使用本书 18
1.9 本章小结 19
第Ⅱ部分 设计基础
第2 章 关注点分离 23
2.1 命名空间 24
2.1.1 命名空间和导入语句 25
2.1.2 导入的多重面纱 27
2.1.3 命名空间可避免冲突 29
2.2 Python 中的分离层级 31
2.2.1 函数 31
2.2.2 类 39
2.2.3 模块 46
2.2.4 包 47
2.3 本章小结 49
第3 章 抽象和封装 51
3.1 什么是抽象 51
3.1.1 “黑匣子” 52
3.1.2 抽象就像洋葱 53
3.1.3 抽象即简化 56
3.1.4 分解实现抽象 57
3.2 封装 58
3.2.1 Python 中的封装构造 58
3.2.2 Python 中的私有变量 60
3.3 试一试 60
3.4 编程风格也是一种抽象 64
3.4.1 过程式编程 64
3.4.2 函数式编程 64
3.4.3 声明式编程 66
3.5 类型、继承和多态性 68
3.6 了解错误的抽象 70
3.6.1 方枘圆凿 71
3.6.2 智者更智 71
3.7 本章小结 72
第4 章 设计高性能的代码 73
4.1 穿越时空 74
4.1.1 复杂度有点复杂 74
4.1.2 时间复杂度 75
4.1.3 空间复杂度 79
4.2 性能与数据类型 81
4.2.1 常量时间的数据类型 81
4.2.2 线性时间的数据类型 82
4.2.3 在数据类型上操作的空间复杂度 82
4.3 让它能够运行,正确运行,快速运行 86
4.3.1 让它运行 86
4.3.2 让它正确运行 87
4.3.3 让它快速运行 90
4.4 工具 91
4.4.1 timeit 模块 92
4.4.2 CPU 性能分析 93
4.5 试一试 95
4.6 本章小结 96
第5 章 测试软件 97
5.1 什么是软件测试 98
5.1.1 软件是否按照要求运行 98
5.1.2 功能测试剖析 99
5.2 功能测试方法 100
5.2.1 手动测试 100
5.2.2 自动化测试 101
5.2.3 验收测试 101
5.2.4 单元测试 103
5.2.5 集成测试 105
5.2.6 测试金字塔 105
5.2.7 回归测试 106
5.3 事实陈述 107
5.4 使用unittest 进行单元测试 108
5.4.1 使用unittest 测试组织 108
5.4.2 使用unittest 运行测试 109
5.4.3 使用unittest 编写个测试 109
5.4.4 使用unittest 编写个集成测试 113
5.4.5 测试替身 116
5.4.6 试一试 118
5.4.7 编写有趣的测试 121
5.5 使用pytest测试 121
5.5.1 使用pytest 测试组织 122
5.5.2 把unittest测试转换为pytest 123
5.6 超越功能测试 124
5.6.1 性能测试 124
5.6.2 负载测试 125
5.7 测试驱动开发:入门 126
5.7.1 测试驱动开发是一种心态 126
5.7.2 测试驱动开发是一种哲学 126
5.8 本章小结 127
第Ⅲ部分 明确大型系统
第6 章 实践中的关注点分离 131
6.1 命令行书签应用程序 132
6.2 踏上Bark 之旅 133
6.3 初始代码结构 134
6.3.1 持久层 136
6.3.2 业务逻辑层 148
6.3.3 表示层 153
6.4 本章小结 162
第7 章 可扩展性和灵活性 163
7.1 什么是可扩展的代码 163
7.1.1 添加新行为 164
7.1.2 修改现有行为 167
7.1.3 松耦合 168
7.2 解决僵化性 170
7.2.1 放手:控制反转 171
7.2.2 细节决定成败:依赖接口 175
7.2.3 抵抗熵:稳健性原则 176
7.3 扩展练习 177
7.4 本章小结 182
第8 章 有关继承的规则(及例外) 183
8.1 过去编程中的继承 183
8.1.1 银弹 184
8.1.2 继承的挑战 184
8.2 当前编程中的继承 186
8.2.1 继承到底是为了什么 186
8.2.2 可替代性 188
8.2.3 继承的理想用例 189
8.3 Python 中的继承 192
8.3.1 类型检查 192
8.3.2 超类访问 193
8.3.3 多重继承和方法解析顺序 194
8.3.4 抽象基类 198
8.4 Bark 中的继承和组合 201
8.4.1 重构以使用抽象基类 201
8.4.2 对继承工作进行后的检查 203
8.5 本章小结 204
第9 章 保持轻量级 205
9.1 类/函数/模块应该有多大 206
9.1.1 物理度量 206
9.1.2 单一职责 207
9.1.3 代码的复杂度 207
9.2 分解复杂度 212
9.2.1 提取配置 212
9.2.2 提取函数 215
9.3 分解类 218
9.3.1 复杂度初始化 218
9.3.2 提取类和转发调用 221
9.4 本章小结 226
第10 章 实现松耦合 227
10.1 定义耦合 227
10.1.1 结缔组织 228
10.1.2 紧耦合 229
10.1.3 松耦合 232
10.2 识别耦合 235
10.2.1 依恋情结 235
10.2.2 散弹式修改 237
10.2.3 抽象泄漏 237
10.3 Bark 中的耦合 238
10.4 寻址耦合 241
10.4.1 用户消息传递 241
10.4.2 书签持久性· 245
10.4.3 试一试 246
10.5 本章小结 250
第Ⅳ部分 下一步学习什么
第11 章 全力以赴 253
11.1 现在怎么办 253
11.1.1 制订计划 254
11.1.2 执行计划 256
11.1.3 跟踪进度 257
11.2 设计模式 259
11.2.1 Python 设计模式的起伏 261
11.2.2 需要了解的术语 261
11.3 分布式系统 262
11.3.1 分布式系统中的故障模式 263
11.3.2 寻址应用程序状态 263
11.3.3 入门术语 264
11.4 进行Python深潜 264
11.4.1 Python 代码样式 264
11.4.2 语言特征是模式 265
11.4.3 入门术语 266
11.5 你已经了解的内容 266
11.5.1 开发人员的心得体会 267
11.5.2 即将完结 268
11.6 本章小结 269
附录A 安装Python 271
A.1 我应该使用什么版本的Python 271
A.2 “系统”Python 272
A.3 安装其他版本的Python 272
A.3.1 下载官方Python 272
A.3.2 使用Anaconda下载 274
A.4 验证安装 274
与我本人一样,Python 诞生于1989 年12 月。虽然我在过去三十年里已经取得了很大的成就,但是Python 的成功显然更加显著。
如今,越来越多的人使用Python 来完成数据科学、机器学习等方面的有趣事情。自从学习了Python,这门“万事俱备的第二好语言”实际上已经成为我完成很多事情的。
在密歇根大学电子工程和计算机科学系学习期间,我有过一段相当传统的编程经历。那时,课程主要集中在我次在学校外工作时继续使用的C 和MATLAB 编程语言上。我在下一个职位上开发了一些shell 脚本和SQL 脚本,用于处理生物信息学大数据。我也使用PHP 从零开始在个人WordPress 网站上完成工作。
虽然我得到了一些结果(在某些情况下很酷),但所使用的语言没有一种能引起共鸣,我对此却毫无察觉。我认为编程语言仅仅是一种达到目的的手段,几乎没有机会让人感到它很有趣。大约是在这个时候,一个朋友邀请我和他一起参加hackathon 项目来构建Ruby 库。
我开始感到世界变得五彩缤纷,就连水果都尝起来更甜等多种美好的体验。Ruby 易于使用解释性语言和人性化的语法,这让我想起了一直在使用的工具。虽然我没有坚持使用Ruby太长时间,但我决定在个人网站的下一次迭代中尝试使用Python 和Django 网页框架。它给了我和Ruby框架一样的快乐和浅易的学习曲线,从此我再也没有走过弯路。
目前Python 被广泛地认为是许多任务的语言,软件开发人员不需要再经历我所尝试的反复试验过程。进入软件行业的崭新的、有趣的途径也正在全面展开。尽管存在很多差异,但是希望我们都能分享在Python 编程中找到的乐趣。希望本书能为你找到这种乐趣做出贡献。
来吧,在奇妙的Python 之旅中,我遇到了不少惊喜。我想见证你建立一个网站、一个数据管道,或者是一个自动植物浇水系统。
不管你喜欢什么,Python 都能给你提供支持。
评论
还没有评论。