Py学习  »  Python

《流畅的 Python》到底好在哪?

编程派 • 4 年前 • 358 次点击  

《Fluent Python》是我最近一个月的地铁通勤读物,它的优秀不仅超出了我的预期,而且还让我开始思考这样一个问题:一本好书,或者再具体一点,一本技术类的好书到底好在哪里?

这个问题还真不简单,就像我们大多数人都有能力甄别一部电影是好是坏,但并不是所有人都能洋洋洒洒写出一篇臧否影评来一样,一本书我们读完都觉得好,但要说出个子午卯酉好在什么地方,往往又不知从何说起。读完《Fluent Python》后这样的感受尤其深刻,这无疑是一本极好的书,但若要向别人推荐,对方问我“好在哪里”,该如何回答?好在内容详实覆盖面广?那PEP和官方文档岂不更好?好在深入浅出?《Head First XXX》似乎又相形见绌。好在写作技巧?好像又太虚无缥缈。这些因素或许都有,但单一一点拎出来又难以尽意。我也只能抛砖引玉,说一说这本书有哪些好处。


结构良好,详略得当


这本书易读的一大原因,就是他采用了良好的组织方式与叙述方法,它的每一章都遵循这样的基本结构:1. 简要说明这一章的主题——2. 提出问题—— 3.示例代码与详细讲解 ——(2-3循环)——总结——延伸阅读——soap box(关于某个问题的发散讨论)这个结构非常适合学习,让将近800页的体量显得没有那么让人望而生畏,而且对于不同层次的读者都相当友好。


善于概括,有洞见


这是我读这本书时一个非常深刻的感受,也是它能在一众介绍语言特性的书籍中脱颖而出的关键。作者往往能一语中的,让一些本来晦涩的、需要反复记忆的点变得十分容易理解。试举几例:


在谈到 __new__这个magic方法时,


  1. The special method that actually constructs an instance is __new__: it's a class method

  2. (but gets special treatment, so the @classmethod decorator is not used)


在介绍descriptor时提到bound method和function,


  1. Methods are implemented as non-overriding descriptors.


这些简洁的概括比比皆是。另外,对于Python语言设计中一些缺陷也能非常及时的指出,比如,为了尽量不引入新关键字,通过复用现有关键字来表达新特性(比如yield from在协程中的应用、else在for循环以及try catch中的应用等)。这些有的像是考前准备的“小抄”,简单有效;有的像是偈语,留下思考的空间。


旁征博引,信手拈来


这是最见功力的一点,看得出作者对书中涉及的每个特性的过去、现状和未来都有非常深入的了解,无论是前人的著述、邮件列表的讨论、stackoverflow的问答,用典详实恰到好处,真正做到了深入浅出。


  1. Easy for beginners, practical for professionals and exciting for hackers.


作者这样评价对Python语言的喜爱,同样我觉得这本书也配得上这样的赞誉。


推荐语


如果让我写一段读这本书的理由,那或许是这样的:


这是一本介绍Python语言特性的书,涵盖了OO、控制流(并发、context manager、协程)、元编程等Python语言中相对晦涩的进阶特性(支持3.4版本,兼顾2.7),但作者并不想将受众局限在框架开发人员或者热衷挖掘奇技淫巧的language lawyers,相反,这是一本写给所有Python使用者的书,在介绍这些特性的过程中,作者用简洁而且有洞见的讲解让不同层次的开发者都能通过对这些特性的学习,更好地理解自己的程序,从而写出更优秀的代码。

作者 | Garfieldog

出处 | 简书


回复下方 「关键词」,获取优质资源


回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「pybooks02」,立即获取 O'Reilly 出版社推出的免费 Python 相关电子书合集

回复关键词「书单02」,立即获取主页君整理的 10 本 Python 入门书的电子版



印度小伙写了套深度学习教程,Github上星标已经5000+

上百个数据文件合并,只能手动复制粘贴?教你一招十秒搞定!

一个提升图像识别准确率的精妙技巧

一文读懂:从 Python 打包到 CLI 工具

如何使用 Python 进行时间序列预测?

美亚Kindle排名第一的Python 3入门书,火遍了整个编程圈

十分钟搭建私有 Jupyter Notebook 服务器

使用 Python 制作属于自己的 PDF 电子书

12步轻松搞定Python装饰器

200 行代码实现 2048 游戏

题图:pexels,CC0 授权。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/32964
 
358 次点击