流畅的python不适合初学者_年度最值得关注Python进阶书——《流畅的Python》
本書的結構
如果你是本書的目標讀者,那你應該可以從本書的任意一章開始閱讀,但是如果按照我寫作時的構思來的話,本書一共分為六個獨立的部分,每個部分內的章節最好按照順序來讀。
在介紹讓你自己實現某些功能的方法之前,我通常會先把現成可用的工具講清楚。比如說第二部分的第2 章覆蓋了序列類型(sequence type),但是像collections.deque 這種類可能就會一帶而過。一直到第四部分,我們才會看看如何從抽象基類(abstract base class, ABC)中獲利,抽象基類則被封裝在collections.abc 這個包里。如果想創建自己的ABC,你可能得看到第四部分的最后一些內容才行,因為我一直覺得,如果沒有熟練使用ABC 的經驗,貿然去實現一套自己的東西是不合適的。
這樣做有幾個好處。第一,知道有什么現成的工具可用,能避免重新發明輪子。畢竟我們使用現有集合類型(collection type)的概率要遠大于自己動手寫一套新的。第二,這樣一來,在討論如何寫新類型之前,我們能夠有更多的機會來了解這些現成類的高級用法。第三,比起從零開始構建一個ABC,繼承已有的ABC 庫應該會簡單一些。最后,我認為在看過一些實際的案例之后,理解抽象會更輕松。
當然,這樣也會帶來一些不便之處,比如書里的向前引用就會分散在各個不同的章節里面。但是經過上述這番梳理,我想這一點不便之處也是可以容忍的。
下面是本書每一部分的主題。
第一部分
第一部分只有單獨的一章,講解的是Python 的數據模型(data model),以及如何為了保證行為一致性而使用特殊方法(比如__repr__),畢竟Python 的一致性是出了名的。其實整本書幾乎都是在講解Python 的數據模型,第1 章算是一個概覽。
第二部分
第二部分包含了各種集合類型:序列(sequence)、映射(mapping)和集合(set),另外還提及了字符串(str)和字節序列(bytes)的區分。說起來,最后這一點也是讓親者(Python 3 用戶)快,仇者(Python 2 用戶)痛的一個關鍵,因為這個區分致使Python 2 代碼遷移到Python 3 的難度陡增。第二部分的目標是幫助讀者回憶起Python 內置的類庫,順帶解釋這些類庫的一些不太直觀的地方。具體的例子有Python 3 如何在我們觀察不到的地方對dict 的鍵重新排序,或者是排序有區域(locale)依賴的字符串時的注意事項。為了達到本部分的目標,有些地方的講解會比較大而全,像序列類型和映射類型的變種就是這樣;有時則會寫得很深入,比方說我會對dict 和set 底層的散列表進行深層次的討論。
第三部分
如何把函數作為一等對象(first-order object)來使用。第三部分首先會解釋前面這句話是什么意思,然后話題延伸到這個概念對那些被廣泛使用的設計模型的影響,最后讀者會看到如何利用閉包(closure)的概念來實現函數裝飾器(function decorator)。這一部分的話題還包括Python 的這些基本概念:可調用(callable)、函數屬性(function attribute)、內省(introspection)、參數注解(parameter annotation)和Python 3 里新出現的nonlocal 聲明。
第四部分
到了這里,書的重點轉移到了類的構建上面。雖然在第二部分里的例子里就有類聲明(class declaration)的出現,但是第四部分會呈現更多的類。和任何面向對象語言一樣, Python 還有些自己的特性,這些特性可能并不會出現在你我學習基于類的編程的語言中。這一部分的章節解釋了引用(reference)的原理、“可變性”的概念、實例的生命周期、如何構建自定義的集合類型和ABC、多重繼承該怎么理順、什么時候應該使用操作符重載及其方法。
第五部分
Python 中有些結構和庫不再滿足于諸如條件判斷、循環和子程序(subroutine)之類的順序控制流程,第五部分的筆墨會集中在這些構造和庫上。我們會從生成器(generator)起步,然后話題會轉移到上下文管理器(context manager)和協程(coroutine),其中會涵蓋新增的功能強大但又不容易理解的yield from 語法。這一部分以并發性和面向事件的I/O 來結尾,其中跟并發性相關的是collections.futures 這個很新的包,它借助futures 包把線程和進程的概念給封裝了起來;而跟面向事件I/O 相關的則是asyncio,它的背后是基于協程和yield from 的futures 包。
第六部分
第六部分的開頭會講到如何動態創建帶屬性的類,用以處理諸如JSON 這類半結構化的數據。然后會從大家已經熟悉的特性(property)機制入手,用描述符從底層來解釋Python 對象屬性的存取。同時,函數、方法和描述符的關系也會被梳理一遍。第六部分會從頭至尾地實現一個字段驗證器,在這個過程中我們會遇到一些微妙的問題,然后在最后一章中就自然引出像類裝飾器(class decorator)和元類(metaclass)這些高級的概念。
總結
以上是生活随笔為你收集整理的流畅的python不适合初学者_年度最值得关注Python进阶书——《流畅的Python》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @RequestMapping 和
- 下一篇: JavaScript 对象和包装类