本书适用于所有对软件设计感兴趣或对 Python 有更多了解的软件工程从业人员。假设读者已经熟悉面向对象软件设计的原理,并且有编写代码的经验。
它将吸引团队领导、软件架构师和高级软件工程师,他们希望学习好的 Python 编码技术,从头开始创建项目,或者在他们的遗留系统上工作,以节省成本和提高效率。
这本书的组织方式使内容的复杂程度越来越高。第一章介绍 Python 的基础知识,这是学习该语言中可用的主要习惯用法、函数和实用程序的好方法。其思想不仅仅是用 Python 解决一些问题,而是用惯用的方式来解决这些问题。
有经验的程序员也将受益于本书中的主题,因为有些章节涵盖了 Python 中的高级主题,如装饰器、描述符和异步编程简介。它将帮助读者更多地了解 Python,因为有些案例是从 Python 语言本身的内部进行分析的。
使用 Python 进行数据处理的科学家也可以从本书的内容中获益,为此,本书的几个部分致力于从头开始建立项目,包括工具、环境配置和发布软件的良好实践。
值得强调的是,本节第一句中的“从业者”一词。这是一本务实的书。示例仅限于案例研究所需,但也旨在类似于实际软件项目的上下文。这不是一本学术性的书,因此,所作的定义、所作的评论和建议应谨慎对待。读者应该以批判性和务实的态度而不是教条的方式来研究这些建议。毕竟,实用胜过纯洁。
第 1 章**简介、代码格式和工具介绍了读者使用 Python 建立开发环境所需的主要工具。我们介绍了建议 Python 开发人员了解的有效使用该语言的基础知识。它还包括一些在项目中维护可读代码的指南,例如用于静态分析、文档、类型检查和代码格式化的工具。对编码标准有一个共同的理解是一件好事,但仅仅依靠良好的意图并不能起作用。这就是为什么本章最后讨论了更有效地工作的工具。
第 2 章**Python 代码介绍 Python 中的第一个习语,我们将在以下章节中继续使用这些习语。我们将介绍 Python 的特殊特性,以及它们的使用方法,在本章中,我们将围绕 Python 代码通常具有更好的质量这一理念开始构建知识。
第 3 章、良好代码的一般特征,回顾了软件工程的一般原则,重点是编写更具可维护性的代码。利用从上一章获得的知识,我们将了解一般的干净设计思想,以及如何在 Python 中实现它们。
第 4 章实体原则*涵盖了一套面向对象软件设计的设计原则。这个首字母缩略词是软件工程语言或行话的一部分,我们将看到它们中的每一个如何应用于 Python。特别是,读者将了解依赖项注入如何使代码更易于维护,这一概念在下一章中将非常有用。
第 5 章使用修饰符改进代码介绍了 Python 的一个最大特性。在理解了如何创建装饰器(用于函数和类)之后,我们将它们用于重用代码、分离职责和创建更细粒度的函数。本章中另一个有趣的学习点是如何利用 decorator 简化复杂和重复的函数签名。
*第 6 章、通过描述符、探索 Python 中的描述符,将面向对象设计提升到一个新的水平。虽然这是一个与框架和工具更相关的特性,但我们可以看到如何使用描述符提高代码的可读性,以及如何重用代码。本章重温的内容将使读者对 Python 有更高的理解。
第 7 章、**生成器、迭代器和异步编程首先展示了生成器是 Python 的一个奇妙特性。迭代是 Python 的一个核心组件,这一事实可能会让我们认为它导致了一种新的编程模型。通过使用生成器和迭代器,我们可以对编写程序的方式进行不同的思考。通过从生成器中吸取的经验教训,我们进一步了解 Python 中的协同路由以及异步编程的基础知识。本章最后解释了异步编程和异步迭代的新语法(以及新的神奇方法!)。
第 8 章单元测试和重构*讨论了单元测试在任何声称可维护的代码库中的重要性。我们将讨论重构作为开发和维护代码库的先决条件,以及单元测试对此的重要性。所有这些都需要适当的工具(主要是unittest
和pytest
模块)的支持。最后,我们了解了好的测试的秘诀不在于测试本身,而在于拥有可测试的代码。
第 9 章、**常见设计模式回顾了如何在 Python 中实现最常见的设计模式,不是从解决问题的角度,而是通过研究它们如何利用更好、更可维护的解决方案来解决问题。本章提到了 Python 的特性,这些特性使一些设计模式变得不可见,并采用了一种实用的方法来实现其中的一些模式。我们将讨论其他特定于 Python 的模式(不太“传统”)。
第 10 章干净的架构*重点阐述干净的代码是良好架构的基础这一理念。我们在第一章中提到的所有这些细节,以及在此过程中回顾的所有其他细节,将在部署系统时在整个设计中发挥关键作用。
读者应具有一定程度的编程经验,并熟悉 Python 语法的基础知识。此外,还假设了基本编程知识(如结构化编程)和面向对象设计知识。
要测试代码,需要安装 Python,可以从下载 https://www.python.org/downloads/ 。代码使用 Python 3.9+运行,强烈建议创建虚拟环境。或者,可以在 Docker 映像中测试代码。
该书的代码包托管在 GitHub 上的https://github.com/PacktPublishing/Clean-Code-in-Python-Second-Edition 。我们在上还提供了丰富的书籍和视频目录中的其他代码包 https://github.com/PacktPublishing/ 。看看他们!
我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:https://static.packt-cdn.com/downloads/9781800560215_ColorImages.pdf
本书中使用了许多文本约定。
CodeInText
:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。例如“那么,只要运行pylint
命令就足以在代码中检查它。”
代码块设置如下:
@dataclass
class Point:
lat: float
long: float
当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:
setup(
name="apptool",
description="Description of the intention of the package",
long_description=long_description,
)
任何命令行输入或输出的编写方式如下:
>>> locate.__annotations__
{'latitude': float, 'longitue': float, 'return': __main__.Point}
粗体:表示一个新术语、一个重要单词或您在屏幕上看到的单词,例如在菜单或对话框中,也会出现在文本中,如下所示。例如:“我们希望设计具有更好的关注点分离。”
警告或重要提示如下所示。
提示和技巧如下所示。
我们欢迎读者的反馈。
一般反馈:发送电子邮件feedback@packtpub.com
并在邮件主题中提及书名。如果您对本书的任何方面有疑问,请发送电子邮件至questions@packtpub.com
。
勘误表:尽管我们已尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,如果您能向我们报告,我们将不胜感激。请访问http://www.packtpub.com/submit-errata ,选择您的书籍,点击勘误表提交表单链接,然后输入详细信息。
盗版:如果您在互联网上发现我们作品的任何形式的非法复制品,请您提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packtpub.com
与我们联系,并提供该材料的链接。
如果您有兴趣成为一名作家:如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请访问http://authors.packtpub.com 。
请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在读者可以看到并使用您的无偏见意见做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们书籍的反馈。非常感谢。
有关 Packt 的更多信息,请访问packtpub.com。******