1. 程式人生 > >如果只推薦一本 Python 書,我要 Pick 它!

如果只推薦一本 Python 書,我要 Pick 它!

今年二月初,我偶然看到了一條推特: ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gdz5p13qd6j20dv0i1wob.jpg) **《流暢的Python》一書的作者釋出了一條激動人心的訊息:他正在寫作第二版!** 如果要票選最佳的 Python 進階類書目,這本書肯定會是得票率最高的書籍之一。我在最早寫“Python貓薦書系列”時,就想推薦它,但又覺得好東西應該留到最後,所以一直拖到了現在…… 如果你讀過它,肯定也會認為它值得推薦;如果你沒有,那請往下閱讀,看我的介紹能否打動你把它列為必讀書目吧~ ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gdz5pe7e8wj20s10c7ju0.jpg) 這本書的英文名是《Fluent Python》,在 2015 年 8 月出版。兩年後,國內的圖靈教育出品了譯本,出版時間是 2017 年 5 月,獲得豆瓣 9.4 高分。(圖書翻譯/出版真是個漫長的過程啊) 作者 Luciano Ramalho 是個巴西人、資深的 Python 程式設計師/演講者、PSF(Python軟體基金會)成員。書籍的技術審校與推薦人囊括了圈內的一眾大咖。 此書一出,大受圈內好評,各國出版社紛紛引進版權,目前至少已有 9 種語言版本(來數數你認識幾種?): ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gjsbk0631vj20m80go0xc.jpg) > PS:圖片出自@fluentpython官推,簡體中文版最薄,巧合佔據C位。根據圖靈教育統計,簡體中文版銷量超過4萬冊,預計在2020年能超越英文版的銷量。 那麼,這本書到底寫了些什麼呢?又有哪些特別之處呢? 全書內容充實,除去前言、附錄和術語表這些內容,共分為六個部分 21 章節。我將核心章節內容製作了一份思維導圖: ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gjtt78czv8j21cr0hk77f.jpg) (在`Python貓`公眾號回覆『**流暢**』,有完整的高清原圖) 以上是主要章節的思維導圖,圖中的數字是摺疊起來的分支數。 下面給大家看看部分的細節圖: ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gjtt1n4kmnj20qg0p10us.jpg) ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gjtt2u2sg2j20pm0ke404.jpg) ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gjtt3363ivj20of0o040f.jpg) ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gjtt3biuiuj20og0p2wgs.jpg) > 原圖太大,展示不下。在`Python貓`公眾號內回覆『**流暢**』,有完整的高清原圖、PDF 版本和 MarkDown 版本 從章節上可以看出,這本書主要面向中高階的開發者。它基本不涉及入門級內容,反而聚焦在資料模型、資料結構、函式物件、面向物件、控制流程與超程式設計等話題上。 開啟書本第一章,作者用寥寥十幾行 Python 程式碼,就徒手實現了一副撲克牌: ```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 物件的構造以及語言內部的特性細節,目的是讓讀者寫出更地道、簡潔高效、可讀易用的程式碼。** ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gjtrfa57k9j20k00dc3ze.jpg) > 《流暢的Python》作者與中文版合影 接著,它介紹了 Python 中一些內建型別的特性(序列型別、對映型別、文字和位元組型別),介紹作為特殊物件的函式以及一般性物件的用法,介紹控制流程(迭代器、生成器、上下文管理器、協程和併發程式設計),最後深入到素有黑魔法之稱的超程式設計(描述符和元類)。 ![](http://ww1.sinaimg.cn/large/68b02e3bgy1gjtt3kc99mj20t20n9gng.jpg) **全書 600 多頁,洋洋灑灑,旁徵博引,內容充實到讓人應接不暇,讓人時不時就產生一種“又學到了新知識”的感覺,以及一種“哦我想進一步學習 xxx”的求知慾望。** 很多讀過書的同學會有一個同感:它的“延伸閱讀/雜談”並不是閒筆,反而有些內容比正文更精彩,作者在此展示了他豐富的知識面(官方文件、社群典故、語法演進、文章視訊、開源專案、語言差異等等),每一章都值得挖掘閱讀。目前沒有任何一本 Python 書籍能在這方面與它匹敵。 我推薦大家找到自己感興趣的章節進行閱讀,另外,有人做了非常不錯的讀書筆記(都挺長的),我放在這裡: > [http://www.hongweipeng.com/index.php/archives/1345](http://www.hongweipeng.com/index.php/archives/1345/) (by hongweipeng) > > [http://frankorz.com/2017/07/01/fluent-python-note](http://frankorz.com/2017/07/01/fluent-python-note/) (by 貓冬) 《流暢的Python》第一版基於當時最新的 Python 3.4。這些年來,Python 不斷豐富自己,既正式宣告了 Python 2 版本的終結,又快速地演進到了最新的 3.9 版本。 但是,由於作者關注的是 Python 的核心概念,探討的是基本不會變化的特性,因此倒不必太擔憂內容過時,它仍是一本非常推薦購買和閱讀參考的書籍。 我非常關心它的第二版,但是也知道,寫作需要時間,英文出版、中文翻譯和中文出版也都需要時間,所以我們就一起靜候佳