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