看這本書(shū)的起因是這個(gè)暑假過(guò)后要正式入職,有點(diǎn)本領(lǐng)恐慌,所以打算趁著暑假臨陣磨槍一下。
說(shuō)起來(lái)用python做主力編程語(yǔ)言已經(jīng)兩年了,但因?yàn)槠綍r(shí)寫(xiě)的主要是實(shí)驗(yàn),所以基本上是怎么順手怎么寫(xiě),只要能跑得起來(lái)就行,所以碼出來(lái)的東西一直挺難看。
看cookbook的主要目地是查缺補(bǔ)漏,了解一下之前沒(méi)怎么用過(guò)的比較高級(jí)的東西,以減少重復(fù)造輪子。
在我看來(lái),一本好的cookbook應(yīng)該包括以下內(nèi)容:
(A1)這個(gè)語(yǔ)言方方面面比較深一些的知識(shí)和技巧。
(A2)容易被忽略的知識(shí)點(diǎn)。?特別是那些“不知道也能寫(xiě)得出程序,但是知道了會(huì)覺(jué)得相見(jiàn)恨晚”的知識(shí)。
而不應(yīng)該包含以下內(nèi)容:
(B1)入門(mén)教程會(huì)覆蓋的內(nèi)容,不會(huì)就基本不可能寫(xiě)出程序那一類(lèi)。
(B2)應(yīng)用面很窄,大多數(shù)人都不會(huì)碰到的問(wèn)題。
(B3)問(wèn)題本身非常清楚、具體,一搜索就能找到,stackoverflow上回答得清清楚楚的問(wèn)題。
從這幾點(diǎn)來(lái)考查,我覺(jué)得這本書(shū)基本達(dá)到了以上幾個(gè)要求。
首先,(A1)全書(shū)七百多頁(yè),十五章的內(nèi)容下來(lái),方方面面覆蓋得算挺周到。(A2) 我的確學(xué)到了很多之前忽略了的知識(shí)。
其次,(B1)太過(guò)初級(jí)的內(nèi)容這本書(shū)里基本沒(méi)有出現(xiàn)。之前初學(xué)python的時(shí)候,我看的是Dive into python——一本挺好的python入門(mén)書(shū)。兩本書(shū)之間重疊的內(nèi)容非常少,說(shuō)明這本cookbook的確如它在前言中聲明的定位一樣,避免了太過(guò)入門(mén)性質(zhì)的內(nèi)容。
不過(guò),這個(gè)評(píng)價(jià)主要基于書(shū)中對(duì)python的核心部分的知識(shí)點(diǎn)取舍的,對(duì)于一些不屬于核心的知識(shí)(比如說(shuō)對(duì)特定package的知識(shí)),本書(shū)的對(duì)內(nèi)容的取舍還值得商榷。比如第3章中關(guān)于numpy的內(nèi)容,雖然不會(huì)在“兩小時(shí)python入門(mén)”出現(xiàn),卻很顯然會(huì)被包含在“兩小時(shí)python數(shù)據(jù)科學(xué)入門(mén)”中。事實(shí)上,對(duì)于原先完全不了解numpy的讀者來(lái)說(shuō),一個(gè)簡(jiǎn)單的numpy介紹,很可能比“問(wèn)題-解決方案-討論”這種cookbook格式要好得多。不過(guò)限于這本書(shū)的cookbook?體例,可能也很難有更好的處理辦法。
最后,美中不足的,這本書(shū)在(B2)和 (B3)兩點(diǎn)上還有比較大的改進(jìn)空間。一個(gè)知識(shí)點(diǎn)是否屬于(B2)(大多數(shù)人都用不到的)可能還屬于一個(gè)見(jiàn)仁見(jiàn)智的問(wèn)題,但一個(gè)知識(shí)點(diǎn)是否屬于(B3)(問(wèn)題描述特別具體清楚,一搜索就能找到stackoverflow上的答案)還是有比較客觀的標(biāo)準(zhǔn)的。這本書(shū)的第九、十等章出現(xiàn)了過(guò)多(B3)類(lèi)型的問(wèn)題,在我看來(lái)不是很有必要。
另外,這本書(shū)是針對(duì)Python 3寫(xiě)的,對(duì)于想要學(xué)習(xí)的Python 3的讀者來(lái)說(shuō),這是一個(gè)額外的好處。不過(guò),本書(shū)只講Python 3,完全不提Python 2和3之間的區(qū)別,如果只是單純想了解Python 2和3的區(qū)別,這不是一本合適的書(shū)。
我在讀這本書(shū)的過(guò)程中,跳過(guò)了第十一、十二、十五章的大部分內(nèi)容,主要原因是這幾部分內(nèi)容和我的工作關(guān)系不太大。并且,我在讀第四、八、九章的時(shí)候,?額外讀了幾篇關(guān)于generator、decorator和descriptor的tutorial來(lái)幫助理解,主要原因是我自己的python知識(shí)有缺漏。這些都是我個(gè)人的因素,和這本書(shū)本身的質(zhì)量關(guān)系不大。
以下是分章節(jié)的簡(jiǎn)評(píng)。
1. Data structures and algorithms
基礎(chǔ)的、通用的小技巧。當(dāng)然有很多內(nèi)容是讀之前就知道的,但也總有一些是不知道的?;旧厦恳黄级绦【?,看起來(lái)很快,而且實(shí)用性很強(qiáng),看了之后馬上就可以拿來(lái)現(xiàn)學(xué)現(xiàn)用。
2. Strings and Text
同上一章
3.Numbers, Dates, and Times
前一半的內(nèi)容很基礎(chǔ)和前兩章差不多。后面一些內(nèi)容是針對(duì)比較具體的情形的,通用性不那么強(qiáng)。其實(shí)這一類(lèi)的內(nèi)容就不是很適合cookbook這種體例吧。
比如有幾節(jié)是關(guān)于numpy內(nèi)容,感覺(jué)比較雞肋。因?yàn)橹灰怯眠^(guò)numpy的肯定都知道,但如果沒(méi)有用過(guò)numpy,只看這幾個(gè)簡(jiǎn)單的例子其實(shí)也學(xué)不會(huì)什么。這種情況本來(lái)只需要給numpy package一個(gè)簡(jiǎn)單的介紹,讓原先不知道的人知道有這么個(gè)東西存在、要用到的時(shí)候知道去找就可以了。
4.Iterators and generator
很用有的一章。不過(guò)如果之前對(duì)iterator和generator不是很熟的話(像我),有些地方需要對(duì)照著文檔或其他教程看。
5. Files and I/O
還不錯(cuò)。有點(diǎn)過(guò)于詳細(xì),一些邊邊角角的內(nèi)容也放在里面了,實(shí)際用的機(jī)會(huì)估計(jì)不多。
6. Data Encoding and Processing
講怎么讀寫(xiě)csv,json,xml,binary等等格式的數(shù)據(jù)。個(gè)人覺(jué)得意義不是很大,需要的時(shí)候直接google就可以方便找到的內(nèi)容。
7. Functions
還不錯(cuò)。后面幾節(jié)稍微難煩。
8. Classes and objects
前面幾節(jié)內(nèi)容不錯(cuò)。后面一半的內(nèi)容比較冗長(zhǎng)復(fù)雜。簡(jiǎn)單翻了翻,沒(méi)有仔細(xì)看。
9. Metaprogramming
這章其實(shí)放在第7、8章之前比較好。因?yàn)檫@章中講的decorator,如果不太熟的話,第7、8章會(huì)看得比較吃力。
10. Modules Packages
比較容易讀的一章。后半部分有一些內(nèi)容針對(duì)的問(wèn)題太具體,用到的機(jī)會(huì)不是很大 。
11. Network and Web Programming
簡(jiǎn)單翻了一下,沒(méi)有讀。因?yàn)楹湍壳暗墓ぷ鲗?shí)在關(guān)系不大,在未來(lái)一段時(shí)間內(nèi)估計(jì)也不太會(huì)用到。缺乏實(shí)際應(yīng)用的背景,光看書(shū)也理解不深。
12. Concurrency
同上一章
13. Utility Scripting and System Administration
挺有意思的一章。內(nèi)容有點(diǎn)雜亂,但是很多小技巧都挺有趣。
14. Testing, Debugging, and Exceptions
挺好的一章。部分內(nèi)容有點(diǎn)淺。但全部讀下來(lái)還是挺有收獲的。
15. C Extensions
前一半快速讀了一下,后一半只是翻了翻。因?yàn)闆](méi)有工作中還沒(méi)有用過(guò),比較細(xì)節(jié)的東西讀了也很難領(lǐng)會(huì)。