《Fluent Python》第一版在 2015 年出版,简体中文版《流畅的Python》在 2017 年出版。从那时起,它就成为了所有 Python 程序员的必读之书。如果一份面向中高级 Python 开发者的书单里不包含这本书,那这份书单肯定不合格!
《Fluent Python》第二版在 2022 年出版,最近,简体中文版《流畅的Python》也隆重上市了!
在收到出版社的赠书后,我发了一条朋友圈,收到了很多点赞,以及咨询最多的两个问题:新书相比于旧版,有什么区别?我是新手,这本书适合我么?
本文将给大家解答这两个问题,另外在文末有赠书福利(送 10 本书),请不要错过哦~
如果你是零基础的 Python 新手,那么这本书不适合你,因为这本书“深入剖析 Python 语言核心特性及底层逻辑”,你可能会感觉它深奥超纲。
如果你是零基础的初学者,那么我推荐你阅读《Python编程:从入门到实践》、《看漫画学Python》这样的入门书籍。但是,在划走之前,请你一定要收藏本文,因为 Python 入门简单,相信你很快就会需要一本指导进阶的书籍了。
Python编程:从入门到实践
除了以上的读者群体外,《流畅的Python》适合于所有 Python 开发者/爱好者,特别地,如果你怀有以下的想法,那么这本书绝对是不二之选:
我在两年前写过一篇《如果只推荐一本 Python 书,我要 Pick 它!》,强烈推荐了第一版书籍,你可以从该文看到第一版主要内容的思维导图,以及我的推荐介绍。
如果你没听说过《流畅的Python》,或者没读过第一版的书,我建议你先读一下那篇文章。
在本文中,我主要面向已经了解过这本书的读者,回答大家最为关切的两个疑问:已经读过第一版了,是否还有必要读第二版呢?已经拥有了第一版书籍(不管实体书还是电子书),是否值得再买入第二版呢?
《流畅的Python》作者 Luciano Ramalho 是 Python 软件基金会成员,他深度参与了各类社区活动,熟知大量语言特性的设计过程和差异,他的书具有内容全面而新潮的特点。在第一版写作完成时,Python 3.5 版本还没发布,但是书中已包含了大量 3.5 版本的内容。
第一版英文书籍发布于 2015 年,那时社区中仍有较多 Python 2 用户因循守旧,因此作者的附加意图之一就是展现 Python 3 的魅力,引导老用户们进行迁移。
在随后 7、8 年时间里,Python 社区中发生了很多重大事件:
第二版书籍从 2020 年初开始写作,他这次已不用特意考虑 Python 2 用户了,重点是让读者熟悉 Python 新的功能特性。
英文第二版的上市时间比 Python 3.10.0 的发布时间早了好几个月,但是,书中的示例已基于 3.10 测试过,不仅有大量 3.10 版本的内容,还涉及一些 3.11 版本的变化。
为了凸显出两个版本的差异,这本书每一章的第一节都会介绍“本章新增内容”。得益于作者梳理出的线索,我整理出了一份新增特性的清单(仅为简化版,详细内容请以书本为准):
以上罗列的内容都是各个版本的新特性,表明了这本书紧跟着语言的发展趋势。
除此之外,书中还增加了大量的内容或修改,比如:新增了很多图表、说明框、示例代码和延伸阅读材料;介绍 dict 与 OrderDict 之间的差异、介绍字典的视图对象、super() 函数是如何支持协作多重继承的、如何避免使用继承、使用 HTTPX 库、新增 FastAPI Web 服务示例、使用元类时的注意事项……
容器序列与扁平序列的图示
以上提到的新内容和修改点,主要都分散在第一版原有的内容里。另外,对于一些重点话题,作者在第二版里增加了大量的篇幅,比如新增两章内容重点介绍类型提示(《第8章 函数中的类型提示》、《第15章 类型提示进阶》)、增加大量并发编程内容(新增一章《第19章 Python并发模型》、新增 asyncio 异步编程内容)……
异步程序执行示意图
在翻阅新书的时候,我还注意到了几个值得一提的章节(都是第一版没有的内容):
四种类型及对应的语言
《流畅的 Python》的内容十分庞博,信息密度极高,作者是个绝对的细节控和整理大师。在主体的文本外,那些密集的提示框、注释、延伸阅读和杂谈,在知识广度和深度上让人叹为观止。
第二版除了新增大量内容外,还调整了很多原有章节的次序,图灵教育整理了全书的思维导图如下:
流畅的Python思维导图-上册
流畅的Python思维导图-下册
总体而言,第二版的变化之大超出了我的预期,值得我们暂时忘记第一版,然后把它当做一本全新的书仔细研读。购入实体书也很有必要,因为很多章节彼此关联,实体书比较便于查找目标章节,也便于阅读完整的上下文信息。
在解答完大家最为关切的问题后,我还想补充几点。
首先是关于印刷,第二版分成了上下两册,用纸也更为讲究,比第一版轻薄许多,对比沉甸甸的第一版,我个人感觉新版的阅读体验提升了不少。
其次是关于翻译,第二版修改了旧版翻译不到位或不准确的很多内容。比如,第一版将“Goose typing”翻译成“白鹅类型”,第二版修改成了“大鹅类型”;第一版将“Boolean Value of a Custom Type”错误译成了“自定义的布尔值”,第二版修正为“自定义类型的布尔值”;第一版将“When a List Is Not the Answer”译成“当列表不是首选时”,第二版修改成“当列表不适用时”……
“goose”是“鹅”,为了跟“鸭子类型”对照,最好翻译成两个字,但鹅不一定是白色,却普遍体型大于鸭子,因此我觉得改成“大鹅类型”是贴切的。另外两个例子出自前两章的小标题,比较显眼易见,书中还有不少翻译调整之处,就不一一列举了。
最后很值得关注的是,作者在创作第二版时,为新书搭建了一个网站,里面已收录了多篇没有写到书中的文章,可以作为辅助材料。
Fluent Python 网站的文章
网站文章目前包括:经典的协程(高能预警:这篇特别长,是对书中第 17.13 章的强力补充)、使用 bisect 处理有序序列、 集合与字典的内部实现、对象的弱引用,等等。
本次赠书共 10 本,有效期至 5 月 2 日 12 点。
抽奖送书(5本):给公众号【Python猫】发送数字“0428”,获取抽奖二维码后参与。
评论送书(5本):有两种评论方式,任选其一即可。方式1,从公众号里加猫哥为好友后,在朋友圈评论“你想获得赠书的理由”;方式2,将本文转发到你的社交圈之一(朋友圈或技术群或头条号或微博或其它交流平台),写上你对本书的评论/推荐语,然后发截图给我。
抽奖送书,各凭运气;评论送书,我会择优录用,奖品不叠加。若有弃奖,则奖品在微信读者群内抽奖送出。最后,感谢图灵出版社对本次活动的赞助。
PS.转发本文,写上你的评论/推荐语,然后@Python猫,参与活动吧