標籤:

薦書:《Fluent Python》

最早應該是2015年4月份在「Python-ideas」郵件組知道的《Fluent Python》,當時作者發帖推薦這本書,其中提到了核心開發Victor Stinner做了asyncio部分的評審。那個時候我對asyncio還不太習慣,asyncio的文檔也比較匱乏,看到這個消息感覺又多了一個好的幫助我了解Python的途徑。

去年雙十一的時候從淘寶淘了一本《流暢的Python》,它是台譯版的《Fluent Python》。買它的原因是為因為之前看原版過程中有多處理解不清晰,希望通過看台版的書來對比幫助理解。

另外,在豆瓣上Fluent Python (豆瓣)的評分高達9.6分!那麼為什麼大家覺得這本書好呢?我今天試著寫一篇書評,分如下4部分來介紹這本書:

作者靠譜

看一本書是不是靠譜,首先就是看作者。我認為一本好的技術書籍,首先作者就要是還在第一線,是不是在這個圈子裡面。Luciano Ramalho是一個非常知名的Pycon演講者,同時還是PSF(Python Software Foundation)的研究員。由於他是Django和Zope系的,他有什麼貢獻我所知甚少。不過我經常能在郵件組看到他參與PEP草案制定和討論。

另外本書基本每個章節都有對應領域z的Python核心開發來評審,質量非常有保證。

關鍵特性剖析到位

目前大量的Python相關的書都傾向基礎只是和入門,內容重複,對於中高級開發者意義不大。雖然一般有Python的新書我都會買來翻翻然後鹹魚賣掉,但是越來越容易失望了。

而《Fluent Python》是Python語言圖書中的一朵「奇葩」。其他大部分書都是在告訴你「應該這麼寫,這樣用就對了,這樣代碼性能更高...」,但是沒人告訴你為什麼?也就是沒有從語言設計實現層面給你一些解釋,這本書會對這些細節剖析的很到位,還會告訴你一些不踩不能理解的坑兒的成因和解決辦法。比如之前我寫過一篇 Python元組的賦值謎題 ,就是因為看《Fluent Python》的時候,才從作者哪裡獲得了肯定的答案。再比如說到__slots__的時候,不僅通過2個例子對比內存使用量究竟有多大差距,還告訴你使用__slots__的弊端,需要你注意到的。__slots__之後我會專門寫一篇專欄來介紹的。

技術前瞻和全面

要注意,這是一本在2015年出版的書,那麼開始寫應該還是在2014年。看看目錄,你能發現它是兼顧Python3(主要基於3.4,那會還沒有3.5,但是書中卻提到了未發布的3.5的一些內容)和Python2(2.7)的。書中大篇幅講到的concurrent.futures、asyncio到現在看來也是非常前沿的技術。另外對描述符、元類、設計模式、abc、編碼問題(貌似很多人對這點都很崩潰,其實是真的沒學好-. -)、上下文管理器等高階內容也都有非常詳實的介紹。

包含參考文獻和視頻鏈接

可以感受到作者對這些內容非常了解,旁徵博引,每章後面都包含了非常多的相關的質量很高的參考文獻和視頻鏈接,方便讀者進一步深入。凡是在網路上找尋各種資源的同學都知道,這是一件費時費力的事情,還得自己去不斷地甄別去掉那些質量差的內容,另外有些資源可能真的不好找,也可能是好的內容由於作者並不會去營銷變的沒有入口,而作者直接把他們列出來了讓大家省心省事。

這本書的受眾

如果你是一個Python語言的初學者,暫時不要動這本書。如果你之前已經看過幾本Python語言相關的書籍,用Python完成過一些項目尤其是能用它來完成日常80%以上的工作時,你就可以看這本書了。

如果你是一個高級的Python開發,還是要做好略微失望的準備。因為他一半以上的內容可能你已經熟悉和了解了。不會有一本書能讓初中高三種級別的讀者滿意,但是這本書還是非常一讀的,因為其中有非常多的細節你可能並不了解和熟悉。

舉個例子,我之前一直以為類中的屬性、特性、方法是不同的3種東西,直到看了本書,我按照自己的理解翻譯了下:

屬性和方法在Python中被統稱為屬性(attributes), 方法是一種可被調用的屬性。除了屬性和方法,也可以建立特性properties,他可以和存取方法(即getter、setter)一起使用來取代屬性,這不會改變類的介面,這符合統一存取原則(uniform access principle):nn一個模塊所提供的所有服務應該是通過一個統一的符號被使用, 其不會泄漏出它們是通過存儲還是經過計算而實現的。n

PS:其中「uniform access principle」的概念是在《面向對象軟體構造》中被提到的。

看完這段是不是有種豁然開朗的感覺呢?

無恥的廣告:《Python Web開發實戰》上市了!

歡迎關注本人的微信公眾號獲取更多Python相關的內容(也可以直接搜索「Python之美」):

推薦閱讀:

Python 2 or Python 3
python那麼多庫,學的時候是怎麼記住的呢?
高效靈活的概率建模方法基於Python

TAG:Python |