健壮的Pythonpdf下载pdf下载

健壮的Python百度网盘pdf下载

作者:
简介:本篇主要提供健壮的Pythonpdf下载
出版社:机械工业出版社京东自营官方旗舰店
出版时间:2023-03
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

产品特色

编辑推荐

适读人群 :有一定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和测试构建代码库的安全网。

作者简介

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

精彩书评

*掌握一门编程语言不难,以结果为导向开发一个小的业务系统也不难,难的是写出优雅、健壮、安全、具有可持续性的代码,而这往往就是小白与高手之间的区别。本书就是这样一本帮助大家向编程高手进阶的书。除了常规的Python语言特性实战之外,本书还包含大量提高编程技法的底层逻辑叙述,让读者知其然,更知其所以然,不断强化编程思维,向高手进阶。此外,本书的翻译也非常专业,遵循了原著的故事性的叙述方式,更加通俗易读。我把此书特推荐给大家,期望广大读者可以从中获益。

—极狐(GitLab)解决方案总监&联合创始人 王斌峰


*约200万年前,人类使用打制石器来猎杀猛兽,这标志着人类早期文明的诞生。而如今在科技文明中,编程语言将成为我们手中的工具,我们可以使用它来改变世界。而本书则可以将各位手中的工具打磨得更锋利、更趁手。

我认为阅读本书是对自己所学Python的再一次打磨。很多方法平时都在使用,但却不明其中要义,正所谓知其然而不知其所以然。本书没有阐述相对枯燥的方法论以及罗列大段代码,而是给出了思考的方向—为什么要这样写?有什么好处?有没有更加优化的写法?我们在作者的思路引导下探索、发现,定能更好地掌握Python语言。

感谢四位译者,感谢这本不可多得的好书。

—摩托罗拉软件架构师,互联网老兵 丁鹏


*本书的英文原版就是一本非常难得的好书。商业软件项目开发的难度在于,除了需要面对更多的技术难点之外,还要思考在大规模甚至超大规模团队之间如何协调,如何在长达数年甚至数十年的软件寿命当中,让软件始终保持面向开发和迭代的活力。这不仅能为软件的生命锦上添花,在很多情况下甚至能决定软件的生死。

所以让软件健壮起来,是所有资深软件从业人员和管理人员必须严肃对待的事情。我很高兴看到这样一本聚焦于“如何让Python团队更好地开发更健壮的Python程序”的书问世,更乐于见到这样一本书被翻译成中文。我希望所有Python开发团队的高级工程师、架构师和管理人员都读一下这本书。

—博世汽车后市场团队高级架构师 夏澎


*人工智能和大数据时代已经来临,以“优雅”“明确”“简单”为标签的Python,拥有开发效率高、可移植性强、可扩展性和可嵌入性好等优点,越来越多的公司和行业开始选择Python。本书从添加代码注解、自定义类型、可扩展的Python、构建安全网络等方面,深入浅出地教你如何熟练掌握Python编程技能,适合所有致力于Python开发的读者阅读。谢谢译者为我们带来这本好书。

—蔚来汽车业务规划专家 李学


*Python 因其简单易上手的特性在不同领域被大规模采用,市面上关于Python 的书籍也是层出不穷。本书作者分四大主题,结合丰富的实战经验,从“如何写出健壮的Python代码”这一全新的角度让读者了解如何让Python 代码更易于维护和变更。对于已经对Python 语言有一定了解的人来说,这将是一本不可多得的好书。

—汇丰软件资深架构师 周训杰


*Python语言借助其简明高效的语法和动态类型,以及解释型语言的本质,在编写脚本和快速开发应用中成为广大工程师喜欢的编程语言。随着近年来AI、机器学习以及大数据应用的大规模普及,工程师迫切需要先进的工程方法来帮助他们使用Python 语言编写可扩展、易维护的程序。

本书很好地解答了软件工程师在使用Python语言开发大型项目时遇到的关于如何更好地保证代码的健壮性、可维护性以及可测试性的困惑,让他们在实际工作中能够全面、完整地设计系统,而不必在黑暗中摸索前行。对于技术经理而言,本书就如何引入技术范式以服务于更高效的团队开发提供了极具价值的参考指南。

—星巴克前资深架构师 周君


*IT从业人员最头疼的是“软件上线即成为遗留系统”,维护遗留系统的防错成本比修改成本要高得多。本书不只分享了实用的Python技巧,更全面系统地阐述了在大型系统建设中,如何保持Python代码的健壮性和可维护性。我尤其喜欢本书中 “定义你的接口”“依赖关系”这两章和第四部分“构建安全网”的内容,它们非常有助于构建易维护的软件。

相信本书可作为一盏指路明灯,指引在Python之路上行进、在代码“沼泽”和系统“焦油坑”中挣扎的同人,成功到达彼岸。

—宝洁(P&G) IT技术经理 刘泉乐


*Python的设计初衷是设计一种简单直观的语言,帮助开发者高效地完成短期开发的日常任务。在很长一段时间里,Python因为其简洁的语法和丰富的标准库,被广泛应用于Web开发、网页爬虫和脚本、科学计算以及机器学习等领域。随着这些领域的应用逐步深入,开发者对于工程化代码的需求越来越强烈,期望Python开发的脚本和应用与其他语言开发的脚本和应用具有一样的健壮性—随着Python版本的迭代,其语言能力、语法等都在不断朝着这个方向发展。本书很好地帮助我们理解了如何写出健壮的Python代码,以满足工程化、模块化大型应用开发的需求。

—路特斯汽车高级研发总监 黄洲


*2021年10月,Python登顶TIOBE编程语言排行榜。在不去谈论它与其他语言孰优孰劣的情况下,这意味着Python已经成为主流的开发语言之一。本书从Python代码注释、类型定义、代码扩展性、代码质量四个维度详细阐释了健壮性的定义和实践方法。书中所描述的场景案例虽然限定在Python语言,但阅读时亦触发了我对于软件代码和工程的更多思考。无论使用何种语言,在软件定义世界的今天,每一位软件工程师都应该去追求构建健壮的代码及健壮的软件!

—吉利控股集团研发效能负责人 詹文君


*一朵鲜花可以擦亮春天的眼睛,一本好书可以启迪沉睡的思想。本书不像市面上的工具书那样枯燥教条,阅读时更像与一个同行深入交谈,共同探索有关Python的更多可能性与创新性。无论初入职场的软件开发小白,还是驰骋职场多年的资深开发工作者,都能从本书中找到工作方法,收获灵感与智慧。感谢几位译者的专业诠释,开卷有益。

—奇瑞控股集团高级IT经理 胡俊



目录

第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特性,但目的不仅仅是让读者会使用这些特性,而是基于这些特性去讨论你的选择会对代码的可维护性产生哪些影响。
杨凌云
凯捷咨询北方测试团队负责人

前言/序言

译者序
编写好代码
“如何编写一段好代码?”我经常被问到这样的问题。写了这么多年代码,我心中仍然没有一个标准答案。但是,我清楚地知道,什么样的代码是被人诟病的“烂代码”:只能自己看懂甚至过段时间自己都看不懂的命名,牵一发而毁全身的神秘逻辑,读起来就像行走于盗梦空间一样的各种嵌套,等等。它们的产生一般都有一个共同原因:习惯着眼于现在而非未来。实现眼前的功能是大部分开发工作的第一要务,但是面向未来的思考往往能成就好的代码。
在职业生涯中,我接触过不少编程语言,回顾这些经历和经验,我发现语言或者工具并不是影响项目成功的关键,关键更在于开发者的意识。
意识,包含编码习惯、设计风格、基于未来的思考等,这些都深刻影响着一段代码的命运。这段代码可能平淡无奇,可能被人赞叹,也可能遭人唾弃。但是没错,它的优劣完全由创造者来掌握。本书虽然基于Python,却道出了很多编码过程中值得学习和应用的实践。换句话说,它不是在教我们如何用Python完成一个功能,而是在分享做好一个复杂项目的经验。

Python的进退
“人生苦短,我用Python”这句活跃在各大Python社区的名言,道出了Python语言的地位。作为一门动态解释性语言,Python简洁、优雅、容易上手,一直是众多编程爱好者喜爱的编程语言之一。但是往往也是因为这些“优点”,很多开发者都容易在Python的大型项目中“放飞自我”,如果我们仅仅关注利用Python提供的方便工具或者丰富的库来快速实现功能,不注重代码本身的质量和可维护性,那么随着时间的推移,这些本来写起来顺风顺水的代码在将来会变成一堆别人不想触碰的“垃圾山”。这也是业界对Python诟病多的地方,因为它和其他同为强类型的语言(比如Java、C#)相比,缺乏了太多限制,这就让它显得更加脆弱,编写小型的工具或者库时可能表现不明显,可一旦用于大型的工程项目,很多人都会望而却步。这也是我们很难看到Python大规模应用到国内很多企业和大型项目中的原因。
然而,这并不意味着Python不够强大,换句话说,Python作为灵活的强类型语言也可以长久健壮地应用在大型复杂项目中。本书基于Python 3论证了这一观点,并通过代码实践从各个角度来告诉大家如何编写面向未来的Python代码,以及如何优雅、合理地实现代码的健壮性。

关于本书内容
本次非常有幸与三位同事周伟、凌锐、凌云一起翻译本书。本书通过四个部分分享了如何编写健壮Python代码:
第一部分“为代码添加类型注解”。介绍类型检查如何在保证健壮性的工作中扮演重要角色。
第二部分“定义你自己的类型”。用面向对象的思维增加代码的健壮性。
第三部分“可扩展的Python”。借助一些设计思想和常见架构,进一步提升代码质量。
第四部分“构建安全网”。用静态检查和测试完善整个代码的安全网。
读者得以从四个不同的角度了解各种Python技巧,并借助其中的例子加强“编写良好代码”(不只是Python)的意识。
作为一名接触Python语言、OOP以及敏捷技术实践多年的架构师及开发者,我个人也从中学到了很多Python的技巧。希望阅读此书的读者都能有所收获,并能够将其中一些做法或者思想应用到自己的职业生涯或者编码工作中。