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