书评:严肃的 Python
从 No Starch Press 购买纸质书可免费获得电子书。
Julien Danjou 的《Serious Python》是一本优秀的书,适合那些已经完成“hello world”教程或从其他编程语言转向 Python 的人,并且想要一本不仅教你如何编写代码,而且教你如何编写代码的书pythonic 方式。
您不会在本书中找到仅介绍语法的章节:它希望您已经掌握了基础知识并希望将您的 Python 技能提升到一个新的水平。 这涵盖了很多其他 Python 书籍没有涉及的领域,我很高兴我的数字书架上有它。
第 1 章介绍了 Python 项目的文件和文件夹布局。 这一章很棒,即使对于像我这样经验丰富的软件开发人员也是如此。 我总是把所有东西都放到“src”和“docs”文件夹中,但不太明白 Python 项目是如何格式化的,更重要的是,为什么。 虽然我以前听说过语义版本控制,但这本书指出了我在整个职业生涯中在版本编号方面做错的几件事。
第 2 章介绍模块和导入,这对于具有相似但不同的导入代码方式的其他语言特别有用。
第 3 章不仅涵盖文档,还涵盖 Python 特定的文档:Sphinx 工具、ReStructured Text、Sphinx 扩展(如 autodoc 和 autosummary)以及警告模块。 这些是我多年来在编写 Python 代码时一直忽略的事情,很高兴能在一个地方找到所有这些信息。
第 4 章介绍了时间戳和时区,这不仅是重要的 Python 信息,而且是重要的编程信息。 大多数程序员只了解与时间/日期相关的基本函数并止步于此。 时区和 Olsen 数据库以及如何*正确*处理它们常常被忽略,导致软件中出现微妙且难以调试的问题。 第 4 章揭示了所有这些问题,并介绍了易于错过的 Python 模块,这些模块使日期和时区的处理变得易于管理。
第 5 章介绍了 Python 代码的打包和分发,考虑到 Python 的各种重叠包管理工具的历史,这尤其复杂。 我希望本章中有更多信息,但它确实可以很好地介绍您通常在整个职业生涯中只能零星地了解的主题。
第 6 章涵盖单元测试(使用 pytest)、固定装置和模拟。 它还涵盖了用于衡量单元测试有效性的 code coverage.py 工具。
第 7 章介绍装饰器和静态/类/抽象方法。 这对我来说特别重要,因为这是一个我一直在通过复制/粘贴其他项目的装饰器代码来解决的主题,虽然它有效,但我没有完全理解*为什么*在我阅读本章之前,代码一直有效。 Python中的静态方法和类方法也是如此,很容易被误用。
第 8 章涵盖函数式编程概念。 虽然 Python 不是一种函数式编程语言,但它确实有许多支持(并受益于)以函数式风格编写代码的特性。 对于任何不了解函数式编程,或者在尝试学习该主题之前被烧毁的人来说,这是必读的一章。
第 9 章是唯一一章我觉得不是绝对需要阅读的章节。 有一个关于抽象语法树的章节很好(特别是因为 Python 带有 ast 模块来帮助导航 Python 代码),但它与大多数程序员无关。 不过,我宁愿阅读本章,也不愿尝试从一些随机的网络教程中找出主题。
第 10 章涵盖性能和优化,不仅解释了 cProfile 模块,还解释了用于反汇编 Python 字节码以进行分析的 dis 模块。 虽然这对于大多数性能改进来说可能不是直接必需的,但它确实很好地介绍了 Python 字节码一点也不神秘的想法; 你可以直接比较 Python 代码的不同位是如何编译成字节码的。 还有大量需要知道的、Python 特有的技巧来编写更快的代码。
第 11 章和第 12 章分别介绍了进程和数据库。 我希望这些章节更长一些,但与许多短章节一样,它们很好地介绍了许多程序员不知道的几个概念,因此值得通读。
第 13 章涵盖了一些不太适合放在任何其他章节中的杂项主题,但我很高兴他涵盖了它们。 上下文管理器、unicode、数据类(使用 attrs 模块)和 Python 2/3 支持在您的 Python 工具箱中绝对重要。
这本书本可以很容易地达到当前长度的十倍,但我喜欢它切中要点,并且它在引导读者了解其他书籍并不总是涵盖的最重要主题方面做得很好。 如果你认真地遵循成熟的流程并成为一名有能力的 Python 程序员,那么“Serious Python”是一本你需要阅读的书。 它充满了实用信息,这些信息通常散布在网络教程、会议演讲和 Stack Overflow 帖子中,但在这里被汇编成一本优秀的书。 5 颗星。
(完全披露:我是 No Starch Press 的作者,但 No Starch Press 没有要求我写这篇评论,我自己购买了一份。)
亚马逊评论链接
阅读更多