《流畅的Python》第二版上市了，值得入手么？
Tags: python, programming, computerscience, books
Published: 2023-04-28 12:22:40

《Fluent Python》第一版在 2015 年出版，简体中文版《流畅的Python》在 2017 年出版。从那时起，它就成为了所有 Python 程序员的必读之书。如果一份面向中高级 Python 开发者的书单里不包含这本书，那这份书单肯定不合格！

**《Fluent Python》第二版在 2022 年出版，最近，简体中文版《流畅的Python》也隆重上市了！**

![](https://img.pythoncat.top/2023-04-23-fluent-python.png)

在收到出版社的赠书后，我发了一条朋友圈，收到了很多点赞，以及咨询最多的两个问题：**新书相比于旧版，有什么区别？我是新手，这本书适合我么？**

本文将给大家解答这两个问题，另外在文末有赠书福利（**送 10 本书**），请不要错过哦~

## 这本书适合哪些读者？

如果你是零基础的 Python 新手，那么这本书不适合你，因为这本书“**深入剖析 Python 语言核心特性及底层逻辑**”，你可能会感觉它深奥超纲。

如果你是零基础的初学者，那么我推荐你阅读《Python编程：从入门到实践》、《看漫画学Python》这样的入门书籍。但是，在划走之前，请你一定要收藏本文，因为 Python 入门简单，相信你很快就会需要一本指导进阶的书籍了。

![Python编程：从入门到实践](https://img.pythoncat.top/2023-04-23-newbee.jpg)

除了以上的读者群体外，《流畅的Python》适合于所有 Python 开发者/爱好者，特别地，如果你怀有以下的想法，那么这本书绝对是不二之选：

- 想要更加熟练地掌握 Python
- 想要了解实用的编程技巧
- 想写出地道、优雅、高效的 Python 代码
- 想要掌握 Python 最新的语言特性

我在两年前写过一篇《[如果只推荐一本 Python 书，我要 Pick 它！](https://mp.weixin.qq.com/s/A4_DD2fvceNk1apn9MQcXA)》，强烈推荐了第一版书籍，你可以从该文看到第一版主要内容的思维导图，以及我的推荐介绍。

如果你没听说过《流畅的Python》，或者没读过第一版的书，我建议你先读一下那篇文章。

在本文中，我主要面向已经了解过这本书的读者，回答大家最为关切的两个疑问：**已经读过第一版了，是否还有必要读第二版呢？已经拥有了第一版书籍（不管实体书还是电子书），是否值得再买入第二版呢？**

## 这本书新增了什么内容？

《流畅的Python》作者 Luciano Ramalho 是 Python 软件基金会成员，他深度参与了各类社区活动，熟知大量语言特性的设计过程和差异，他的书具有**内容全面而新潮**的特点。在第一版写作完成时，Python 3.5 版本还没发布，但是书中已包含了大量 3.5 版本的内容。

第一版英文书籍发布于 2015 年，那时社区中仍有较多 Python 2 用户因循守旧，因此作者的附加意图之一就是展现 Python 3 的魅力，引导老用户们进行迁移。

在随后 7、8 年时间里，Python 社区中发生了很多重大事件：

- 2015 年，PEP-484 被引入到 Python 3.5 版本，类型提示开始迅猛发展
- 2015 年以来，asyncio 引入了很多新特性，异步编程越来越好用
- 2015 年 TensorFlow 发布，2016 年 PyTorch 发布，2017 年 AlphaGo 击败人类世界围棋冠军。2022 年 ChatGPT 发布，各种 AI 模型和应用变得数不胜数
- 2018 年，Python 之父 Guido van Rossum 卸任“独裁者”，社区开始“指导委员会”治理模式
- 2020 年，Python 2 彻底停止维护
- 2023 年，PEP-684 被采纳，[PEP-703 也有希望被采纳](https://mp.weixin.qq.com/s/HHSjv0ZlAjq0ZvLHMI-W9g)，GIL 将迎来重大变革……

第二版书籍从 2020 年初开始写作，他这次已不用特意考虑 Python 2 用户了，重点是让读者熟悉 Python 新的功能特性。

英文第二版的上市时间比 Python 3.10.0 的发布时间早了好几个月，但是，书中的示例已基于 3.10 测试过，不仅有大量 3.10 版本的内容，还涉及一些 3.11 版本的变化。

为了凸显出两个版本的差异，这本书每一章的第一节都会介绍“本章新增内容”。得益于作者梳理出的线索，我整理出了一份新增特性的清单（仅为简化版，详细内容请以书本为准）：

- 3.5 版本：原生协程、矩阵乘法运算
- 3.6 版本：f-string 语法、collections.abc.Collection 抽象基类、异步生成器
- 3.7 版本：dict 插入有序、@dataclass 装饰器、contextlib 模块新增的几个函数、http.server 的多线程服务器
- 3.8 版本：仅限位置参数、异步的 REPL、@functools.cached_property、海象运算符（:=）
- 3.9 版本：`|` 和 `|=` 运算符、缓存装饰器 functools.cache、泛化类型提示
- 3.10 版本：模式匹配语法（match-case）、zip() 函数的新功能、带括号的上下文管理器

以上罗列的内容都是各个版本的新特性，表明了这本书紧跟着语言的发展趋势。

除此之外，书中还增加了大量的内容或修改，比如：新增了很多图表、说明框、示例代码和延伸阅读材料；介绍 dict 与 OrderDict 之间的差异、介绍字典的视图对象、super() 函数是如何支持协作多重继承的、如何避免使用继承、使用 HTTPX 库、新增 FastAPI Web 服务示例、使用元类时的注意事项……

![容器序列与扁平序列的图示](https://img.pythoncat.top/2023-04-23-array.png)

以上提到的新内容和修改点，主要都分散在第一版原有的内容里。另外，对于一些重点话题，作者在第二版里增加了大量的篇幅，比如新增两章内容重点介绍类型提示（《第8章 函数中的类型提示》、《第15章 类型提示进阶》）、增加大量并发编程内容（新增一章《第19章 Python并发模型》、新增 asyncio 异步编程内容）……

![异步程序执行示意图](https://img.pythoncat.top/2023-04-24_asyncio.png)

在翻阅新书的时候，我还注意到了几个值得一提的章节（都是第一版没有的内容）：

- 第 13 章对四种类型的划分讨论（鸭子类型、大鹅类型、静态鸭子类型、静态类型），不再是常规的类型分类角度（即动态类型、静态类型、强类型、弱类型），而是将类型提示以及抽象基类整合进来，作者画的图例让我感觉耳目一新
- 第 2.6 节不仅介绍了最新的模式匹配（match-case）语法，还用它重构了一个解释器 lis.py 代码。然后到了第 18.3 节，作者又进一步分析 lis.py 的整体机制，试图让我们感受到“地道的 Python 代码体现的编程美感”，通过介绍 Scheme 句法，让 Python 开发者感受“简单的语言设计哲学如何让 Scheme 成为大师级作品”
- 第 21.9.1 节使用 FastAPI 框架实现 Web 服务，舍弃了第一版中用到的 aiohttp，这为近几年已十分流行的 FastAPI 又助力推了一把

![四种类型及对应的语言](https://img.pythoncat.top/2023-04-23_typing.png)

《流畅的 Python》的内容十分庞博，信息密度极高，作者是个**绝对的细节控和整理大师**。在主体的文本外，那些密集的提示框、注释、延伸阅读和杂谈，在知识广度和深度上让人叹为观止。

第二版除了新增大量内容外，还调整了很多原有章节的次序，图灵教育整理了全书的思维导图如下：

![流畅的Python思维导图-上册](https://img.pythoncat.top/2023-04-23-mind-map-2.png)

![流畅的Python思维导图-下册](https://img.pythoncat.top/2023-04-23-mind-map-1.png)

总体而言，第二版的变化之大超出了我的预期，值得我们暂时忘记第一版，然后把它当做一本全新的书仔细研读。购入实体书也很有必要，因为很多章节彼此关联，实体书比较便于查找目标章节，也便于阅读完整的上下文信息。

## 其它的变化

在解答完大家最为关切的问题后，我还想补充几点。

首先是关于印刷，第二版分成了上下两册，用纸也更为讲究，比第一版轻薄许多，对比沉甸甸的第一版，我个人感觉新版的阅读体验提升了不少。

其次是关于翻译，第二版修改了旧版翻译不到位或不准确的很多内容。比如，第一版将“Goose typing”翻译成“白鹅类型”，第二版修改成了“大鹅类型”；第一版将“Boolean Value of a Custom Type”错误译成了“自定义的布尔值”，第二版修正为“自定义类型的布尔值”；第一版将“When a List Is Not the Answer”译成“当列表不是首选时”，第二版修改成“当列表不适用时”……

“goose”是“鹅”，为了跟“鸭子类型”对照，最好翻译成两个字，但鹅不一定是白色，却普遍体型大于鸭子，因此我觉得改成“大鹅类型”是贴切的。另外两个例子出自前两章的小标题，比较显眼易见，书中还有不少翻译调整之处，就不一一列举了。

最后很值得关注的是，作者在创作第二版时，为新书搭建了一个[网站](https://www.fluentpython.com)，里面已收录了多篇没有写到书中的文章，可以作为辅助材料。

![Fluent Python 网站的文章](https://img.pythoncat.top/2023-04-22_website.png)

网站文章目前包括：经典的协程（高能预警：这篇特别长，是对书中第 17.13 章的强力补充）、使用 `bisect` 处理有序序列、 集合与字典的内部实现、对象的弱引用，等等。

## 福利环节

本次赠书共 **10** 本，有效期至 5 月 2 日 12 点。

**抽奖送书（5本）**：给公众号【**Python猫**】发送数字“**0428**”，获取抽奖二维码后参与。

**评论送书（5本）**：有两种评论方式，任选其一即可。方式1，从公众号里加猫哥为好友后，在朋友圈评论“你想获得赠书的理由”；方式2，将本文转发到你的社交圈之一（朋友圈或技术群或头条号或微博或其它交流平台），写上你对本书的评论/推荐语，然后发截图给我。

抽奖送书，各凭运气；评论送书，我会择优录用，奖品不叠加。若有弃奖，则奖品在微信读者群内抽奖送出。最后，感谢图灵出版社对本次活动的赞助。

![](https://img.pythoncat.top/pythoncat.png)