×
暂无评论
图文详情
  • ISBN:9787111721444
  • 装帧:一般胶版纸
  • 册数:暂无
  • 重量:暂无
  • 开本:16开
  • 页数:316
  • 出版时间:2023-03-01
  • 条形码:9787111721444 ; 978-7-111-72144-4

本书特色

适读人群 :有一定Python编程经验的开发人员本书适用于任何希望以可持续和可维护的方式开发代码的Python开发人员。 注意,这并不是您的第1本Python书;阅读本书前您应该熟悉Python控制流,并且以前使用过类。 如果:你正在寻找更具入门性的图书,建议先阅读Mark Lutz(O'Reilly)的《Learning Python》(中文版:《Python学习手册》) 本书将研究用户定义的类型,例如类和枚举,以及Python的类型提示系统。还将探讨如何使Python可扩展,以及如何使用一个全面的测试策略作为安全网。读完本书你将能够使用Python类型编写更清晰、更易于维护的代码。 主要内容: 第1部分“为代码添加类型注解”。介绍类型检查如何在保证健壮性的工作中扮演重要角色。第2部分“定义你自己的类型”。用面向对象的思维增加代码的健壮性。第3部分“可扩展的Python”。借助一些设计思想和常见架构,进一步提升代码质量。第4部分“构建安全网”。用静态检查和测试完善整个代码的安全网。读者得以从四个不同的角度了解各种Python技巧,并借助其中的例子加强“编写良好代码”(不只是Python)的意识。希望阅读此书的读者都能有所收获,并能够将其中一些做法或者思想应用到自己的职业生涯或者编码工作中。

内容简介

你的Python项目是否正在变得越来越庞大?随着代码的扩展,调试和维护工作变得更加艰难,你是否感到痛苦?Python是一种容易学习和使用的语言,但这也意味着系统可以迅速发展到无法理解的程度。值得庆幸的是,Python具有帮助开发者克服可维护性困境的功能。在这本实用的书中,作者Patrick Viafore将告诉你如何优选限度地使用 Python的类型系统。你将看到用户定义的类型(如类和枚举),以及Python的类型提示系统。你还将学习如何使Python代码具有可扩展性,以及如何基于一个全面的测试策略构建安所有渠道。利用这些知识和技术,你将编写更清晰、更易于维护的代码。通过学习本书,你将:*了解为什么类型在现代开发生态系统中是必不可少的。*了解类、字典和枚举等类型选择是如何反映特定意图的。*在不加剧臃肿的情况下使Python代码在未来可扩展。*使用流行的Python工具来提高代码库的安全性和健壮性。*评估当前的代码以检测常见的可维护性问题。*通过linter和测试构建代码库的安所有渠道。

目录

第1章 健壮的Python简介9

1.1 健壮性9

1.2 你的意图是什么12

1.3 Python中的意图示例18

1.3.1 集合18

1.3.2 迭代21

1.3.3 *小惊讶原则22

1.4 小结24


**部分 为代码添加类型注解


第2章 Python类型简介27

2.1 类型中有什么27

2.1.1 机器表达27

2.1.2 语义表达29

2.2 类型系统32

2.2.1 强类型与弱类型32

2.2.2 动态类型与静态类型33

2.2.3 鸭子类型34

2.3 小结36


第3章 类型注解37

3.1 什么是类型注解37

3.2 类型注解的好处41

3.2.1 自动补全41

3.2.2 类型检查器42

3.2.3 练习:找出bug43

3.3 什么时候使用类型注解45

3.4 小结46


第4章 约束类型47

4.1 Optional类型48

4.2 Union类型53

4.3 Literal类型57

4.4 Annotated类型58

4.5 NewType58

4.6 Final类型60

4.7 小结61


第5章 集合类型62

5.1 向集合添加类型注解62

5.2 同构集合与异构集合63

5.3 向字典添加类型67

5.4 创建新的集合类型69

5.4.1 泛型69

5.4.2 修改现有的类型71

5.4.3 像ABC一样简单74

5.5 小结76


第6章 自定义你的类型检查器77

6.1 配置类型检查器77

6.1.1 配置mypy78

6.1.2 mypy报告81

6.1.3 加速mypy82

6.2 其他类型检查器83

6.2.1 Pyre83

6.2.2 Pyright88

6.3 小结90


第7章 采用类型检查的实践91

7.1 权衡利弊92

7.2 早日实现投入产出平衡93

7.2.1 找到你的痛点93

7.2.2 从战略上选择目标代码94

7.2.3 依靠工具95

7.3 小结101


第二部分 定义你自己的类型


第8章 用户自定义类型:枚举105

8.1 用户自定义类型105

8.2 枚举106

8.2.1 Enum108

8.2.2 何时不使用109

8.3 高级用法109

8.3.1 自动分配值109

8.3.2 Flag111

8.3.3 整数转换112

8.3.4 唯一性114

8.4 小结115


第9章 用户自定义类型:数据类116

9.1 数据类实战116

9.2 用法120

9.2.1 字符串转换120

9.2.2 相等性121

9.2.3 关联性比较121

9.2.4 不变性123

9.3 与其他类型的比较124

9.3.1 数据类与字典124

9.3.2 数据类与TypedDict125

9.3.3 数据类与命名元组125

9.4 小结126


第10章 用户自定义类型:类127

10.1 类的剖析127

10.2 不变量129

10.2.1 避免损坏的不变量131

10.2.2 为什么不变量是有益的132

10.2.3 沟通不变量134

10.2.4 消费你的类134

10.2.5 维护者怎么办136

10.3 封装和维护不变量137

10.3.1 封装137

10.3.2 保护数据访问138

10.3.3 操作140

10.4 小结142


第11章 定义你的接口144

11.1 自然接口设计145

11.2 自然的交互148

11.2.1 自然接口实践149

11.2.2 魔法方法153

11.2.3 上下文管理器155

11.3 小结158


第12章 子类型159

12.1 继承159

12.2 可替代性163

12.3 设计方面的考虑168

12.4 小结171


第13章 协议172

13.1 类型系统之间的张力172

13.1.1 留空类型或使用Any类型174

13.1.2 使用Union174

13.1.3 使用继承174

13.1.4 使用mixin176

13.2 协议177

13.3 高级用法179

13.3.1 复合协议179

13.3.2 运行时可检查协议180

13.3.3 满足协议的模块180

13.4 小结181


第14章 使用pydantic进行运行时检查183

14.1 动态配置183

14.2 pydantic189

14.2.1 验证器190

14.2.2 验证与解析193

14.3 小结194


第三部分 可扩展的Python


第15章 可扩展性197

15.1 可扩展性是什么197

15.2 开闭原则203

15.2.1 检测OCP侵犯203

15.2.2 缺点204

15.3 小结205


第16章 依赖关系206

16.1 关系207

16.2 依赖关系的类型209

16.2.1 物理依赖关系209

16.2.2 逻辑依赖关系212

16.2.3 时间依赖关系213

16.3 可视化你的依赖关系215

16.3.1 可视化包215

16.3.2 可视化导入216

16.3.3 可视化函数调用217

16.3.4 解释依赖关系图219

16.4 小结220


第17章 可组合性221

17.1 可组合性介绍221

17.2 策略与机制225

17.3 较小规模的组合228

17.3.1 组合函数228

17.3.2 组合算法231

17.4 小结234


第18章 事件驱动的架构235

18.1 工作原理235

18.2 简单的事件237

18.2.1 使用消息代理237

18.2.2 观察者模式239

18.3 事件流241

18.4 小结243


第19章 可插入的Python245

19.1 模板方法模式246

19.2 策略模式248

19.3 插件式架构250

19.4 小结253


第四部分 构建安全网


第20章 静态分析257

20.1 lint检测257

20.1.1 编写自己的Pylint插件259

20.1.2 分解插件261

20.2 其他静态分析器263

20.2.1 复杂度检查器264

20.2.2 安全分析266

20.3 小结267


第21章 测试策略268

21.1 定义测试策略268

21.2 降低测试成本273

21.3 小结282


第22章 验收测试283

22.1 行为驱动开发284

22.1.1 Gherkin语言284

22.1.2 可执行规范286

22.2 额外的behave特性288

22.2.1 参数化步骤288

22.2.2 表格驱动的需求288

22.2.3 步骤匹配289

22.2.4 定制测试生命周期289

22.2.5 使用标记选择性地运行测试290

22.2.6 报告生成290

22.3 小结292


第23章 基于属性的测试293

23.1 用Hypothesis开展基于属性的测试293

23.1.1 Hypothesis的魔力297

23.1.2 与传统测试的对比298

23.2 充分利用Hypothesis299

23.2.1 Hypothesis策略299

23.2.2 生成算法300

23.3 小结303


第24章 突变测试305

24.1 什么是突变测试305

24.2 用mutmut进行突变测试307

24.2.1 修复突变体309

24.2.2 突变测试报告310

24.3 采用突变测试311

24.4 小结314


展开全部

节选

*“时人不识凌云木, 直待凌云始道高。”这些保证/增强代码健壮性的做法往往在一开始并不会彰显它的魅力,但只要你坚持做正确的事情,它的作用和影响便一定会在日后慢慢凸显。“不积跬步,无以至千里。”希望大家不仅在编程过程中能够保持追求完美、持续改进的习惯,而且在自己的学习生活过程中同样能够如此。从日常中积累,从细微处成长,早日实现自己工作和生活中的每一个目标。与君共勉!姚文杰,凯捷咨询数字化团队架构师 *市场上介绍Python编程的书籍很多,许多开发人员只接触了Python语言的表面,而没有深入学习Python编程的所有工具和技巧。通过阅读本书,你将学会如何更好地使用Python,你将接触许多使得Python整洁并可维护的方法。这样,未来的维护者也将会喜爱并使用你写出的每段代码,因为它是预先“精心设计”的。本书不只是编程的参考书,更是便于与公司和组织内的开发人员一起探讨如何好地应用这些编程原则的指南。周伟凯捷咨询数字化团队资深项目经理 *我们都知道Python是一门语法简单、设计优雅的语言,“低门槛”和“易用”这两个特点造就了它活跃的生态,进而使它拥有了大量库和语法糖,并成为编程零基础选手快速入门的不二之选。但与此同时,作为Python语言的使用者和软件交付咨询师,我深知我们不能因为手里有把好的砍柴刀就对危机四伏的软件世界掉以轻心甚至洋洋得意。软件工程所要应对的根本问题并不会凭空消失,很庆幸有Patrick Viafore这样务实的技术作者能深入浅出地给软件从业者分享写出好代码的原则、方法与工具,因此本书也同样适用于使用其他编程语言的读者。梁凌锐凯捷咨询数字化团队敏捷咨询顾问 *Python是一门简单易学并且功能非常强大的编程语言,所以即使你是编程新手,也可以通过自学很快上手。但是随着软件系统变得越来越复杂,仅仅接触Python的表面是远远不够的,否则软件系统会因为膨胀而变得脆弱。因此,深入学习编写健壮的Python代码所需的所有工具和技巧是非常重要的。本书适用于有一定Python编程经验的读者,涵盖许多高级Python特性,但目的不仅仅是让读者会使用这些特性,而是基于这些特性去讨论你的选择会对代码的可维护性产生哪些影响。杨凌云凯捷咨询北方测试团队负责人

作者简介

Patrick Viafore在关键任务软件领域有超过14年的工作经验,专业方向涉及雷电检测、电信和操作系统。他通过开发管道和工具,将Ubuntu镜像部署到公有云供应商,并通过Kudzera有限责任公司进行软件咨询和项目承包(他是这家公司的负责人)。他的目标是使计算机科学以及软件工程主题对开发者社区来说更加容易理解。

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航