29

如果只推荐一本 Python 书,我要 Pick 它!

 3 years ago
source link: https://segmentfault.com/a/1190000037572452
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

今年二月初,我偶然看到了一条推特:

UZN3m2u.jpg!mobile

《流畅的Python》一书的作者发布了一条激动人心的消息:他正在写作第二版!

如果要票选最佳的 Python 进阶类书目,这本书肯定会是得票率最高的书籍之一。我在最早写“Python猫荐书系列”时,就想推荐它,但又觉得好东西应该留到最后,所以一直拖到了现在……

如果你读过它,肯定也会认为它值得推荐;如果你没有,那请往下阅读,看我的介绍能否打动你把它列为必读书目吧~

zYVreaJ.jpg!mobile

这本书的英文名是《Fluent Python》,在 2015 年 8 月出版。两年后,国内的图灵教育出品了译本,出版时间是 2017 年 5 月,获得豆瓣 9.4 高分。(图书翻译/出版真是个漫长的过程啊)

作者 Luciano Ramalho 是个巴西人、资深的 Python 程序员/演讲者、PSF(Python软件基金会)成员。书籍的技术审校与推荐人囊括了圈内的一众大咖。

此书一出,大受圈内好评,各国出版社纷纷引进版权,目前至少已有 9 种语言版本(来数数你认识几种?):

6JFb6j.jpg!mobile

PS:图片出自@fluentpython官推,简体中文版最薄,巧合占据C位。根据图灵教育统计,简体中文版销量超过4万册,预计在2020年能超越英文版的销量。

那么,这本书到底写了些什么呢?又有哪些特别之处呢?

全书内容充实,除去前言、附录和术语表这些内容,共分为六个部分 21 章节。我将核心章节内容制作了一份思维导图:

jauaQ3.jpg!mobile

(在 Python猫 公众号回复『 流畅 』,有完整的高清原图)

以上是主要章节的思维导图,图中的数字是折叠起来的分支数。

下面给大家看看部分的细节图:

FzuAzqf.jpg!mobile

uYn6RnR.jpg!mobile

EbIfaem.jpg!mobile

7JBvUzV.jpg!mobile

原图太大,展示不下。在 Python猫 公众号内回复『 流畅 』,有完整的高清原图、PDF 版本和 MarkDown 版本

从章节上可以看出,这本书主要面向中高级的开发者。它基本不涉及入门级内容,反而聚焦在数据模型、数据结构、函数对象、面向对象、控制流程与元编程等话题上。

打开书本第一章,作者用寥寥十几行 Python 代码,就徒手实现了一副扑克牌:

import collections

Card = collections.namedtuple('Card', ['rank', 'suit'])


class FrenchDeck:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()

    def __init__(self):
        self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks]

    def __len__(self):
        return len(self._cards)

    def __getitem__(self, position):
        return self._cards[position]

然后,直接就点出了全书最关注的核心话题: 由各种特殊方法构成的数据模型。

特殊方法(special method)是__xxx__() 这种以前后双下划线命名的东西,通常又被称为魔术方法(magic method)和双下方法(dunder method),是 Python 独有的设计。

数据模型(data model)无疑是 Python 语言的关键核心,是得以形成所谓 Python 风格(pythonic)的基石。Python 中一切皆对象,而数据模型则是这些对象的接口规范,正是因为它,Python 得以获得极强的行为一致性。

《流畅的Python》以数据模型为始,定下了全文的风格基调, 即关注 Python 对象的构造以及语言内部的特性细节,目的是让读者写出更地道、简洁高效、可读易用的代码。

YN3E7na.jpg!mobile

《流畅的Python》作者与中文版合影

接着,它介绍了 Python 中一些内置类型的特性(序列类型、映射类型、文本和字节类型),介绍作为特殊对象的函数以及一般性对象的用法,介绍控制流程(迭代器、生成器、上下文管理器、协程和并发编程),最后深入到素有黑魔法之称的元编程(描述符和元类)。

aQv2Qj3.jpg!mobile

全书 600 多页,洋洋洒洒,旁征博引,内容充实到让人应接不暇,让人时不时就产生一种“又学到了新知识”的感觉,以及一种“哦我想进一步学习 xxx”的求知欲望。

很多读过书的同学会有一个同感:它的“延伸阅读/杂谈”并不是闲笔,反而有些内容比正文更精彩,作者在此展示了他丰富的知识面(官方文档、社区典故、语法演进、文章视频、开源项目、语言差异等等),每一章都值得挖掘阅读。目前没有任何一本 Python 书籍能在这方面与它匹敌。

我推荐大家找到自己感兴趣的章节进行阅读,另外,有人做了非常不错的读书笔记(都挺长的),我放在这里:

《流畅的Python》第一版基于当时最新的 Python 3.4。这些年来,Python 不断丰富自己,既正式宣告了 Python 2 版本的终结,又快速地演进到了最新的 3.9 版本。

但是,由于作者关注的是 Python 的核心概念,探讨的是基本不会变化的特性,因此倒不必太担忧内容过时,它仍是一本非常推荐购买和阅读参考的书籍。

我非常关心它的第二版,但是也知道,写作需要时间,英文出版、中文翻译和中文出版也都需要时间,所以我们就一起静候佳音吧。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK