在python2和3交替的时代学python是个很麻烦的事情。因为版本的变化还是挺大的,语法和特性,以及标准库都有较多的改变。因此,很难找本合适的教材,替不喜欢读英文的新手找中文版教材就更难了。Learning Python确实也不错,但最新版的中文版貌似被搞得很囧。其他的入门书籍,说实话,并不完全算得上入门书籍,比如Dive Into Python 3。DIP3其实更适合有经验的programer,因为DIP3中的例子往往带有很多的特性,但介绍的时候,只突出讲解的特性,因此DIP3中的例子在难度上不能说是循序渐进的。但对于从来没有写过代码的新手来说,DIP3中的第一个例子估计就足以让新手放弃学习python的念头了。在简单看完几个python的教程和入门书籍以后,我发现真正把python的语法和特性讲透了的,基本没有。官方的Tutorial是个不错的速成教程,Guido自己写得,但太短,很多东西都没有展开。Learn Python The Hard Way没有中文版。所以这本真的是为数不多的选择。
当然这本书的缺点是不少,印刷和翻译就不提了,都被人喷出翔来了,我也不好意思再去责难出版社和译者,毕竟翻译时间紧、报酬少,质量不高也容易理解,不过这本书都出版2年了,还是建议译者和出版社都做一下进一步的校对和润色工作。
谈谈内容,整本书的结构安排还是比较明显的。先是基础知识和python的基本数据类型和语言特性介绍,然后是面向对象的编程。之后介绍python的标准库以及相关主题的编程(比如数据库、文件IO、GUI、网络编程),最后是以10个项目来总结对前面知识的综合运用。应该说这个内容编排和传统的编程入门书籍没有太大区别,除了最后的10个练习项目是特色。除此以外,这本书对于基础知识的讲解还是比较到位的,说比较到位,自然是还有缺陷,而且缺陷不小,后面会详谈。但无论如何,新手看完前面,基本能够做点简单的事情,对编程应该有起码的概念了。如果能耐心的敲完书中的示例,并且认真的学习python的标准库的话,初学者应该能够很快的写出一些简单的小工具。如果能够对书中第19章的内容进行深入学习,并认真额完成10个项目的话,基本上可以说半只脚进了软件开发的门。不过如果你以为这样就算学会python了,抱歉,事情没那么简单。
所以这里要好好的谈几点书中的缺陷。时间仓促,我读得很快,所以也只挑我觉得不爽的地方。
1.基础知识中居然没有单独一章讲解python的函数。要知道python的函数还是有不少的特性的。比如python对闭包和lambda表达式的支持。比如装饰器语法等特性。这些都是python中非常重要的特性。尤其是装饰器语法,在软件开发实践中是很有用的。而且我也发现一个特点,大多数python入门书籍很少提及python的装饰器语法,不知为什么。
2.对于python的特殊方法和属性的探讨不够详尽。尽管作者对几个重要的特殊方法和属性做了讲解(第9章),但还是有不少漏网之鱼的。比如作者在书中提到过__call__函数。这个东西也是很好玩的一个函数,在定义类的时候实现这个方法,可以使类实例具有函数一样的特性。可惜作者没有多讲。而且这个函数和python的装饰器语法联系在一起可以弄出很有意思的代码。
3.网络编程缺乏对WSGI标准的介绍。这是个大bug。没想到整个网络编程居然还在讲mod_python这种老玩意。要知道WSGI之于python就如同Servlet API之于Java。如此重要的标准在2003年的PEP333中就提出了,这本书的英文版出版于2008年,不知道为何5年以后作者居然还在讲解非标准的东西。而且python主流的web框架如Django、Tornado等都支持这个标准,所以书中对此完全不提,不得不说是一个很大的缺陷。这与书的副标题from novice to professionnal完全不符。
总的说来,这本书不算好,但也不算差。而python的中文书一直都不是太多,而且更新的速度一直都不太快,这都跟国内的环境有关。目前学习python最好的,还是看python的英文文档,国外的好的英文书籍,以及一些比较重要的项目的源代码,比如Tornado、gevent等,以及基于这些优秀的项目的一些开源应用代码。所以,有志学习python的同学,还是要努力看英文。