看这本书的起因是这个暑假过后要正式入职,有点本领恐慌,所以打算趁着暑假临阵磨枪一下。

说起来用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

前一半快速读了一下,后一半只是翻了翻。因为没有工作中还没有用过,比较细节的东西读了也很难领会。