No Starch Press出版的《Python Playground》一书囊括的项目主题广泛,且为数众多,该书旨在展示Python是如何运用在这些不同内容主题上的,包括创建ASCII art、飞鸟仿真、连接的Raspberry Pi的接口及其它。InfoQ采访了书的作者Mahesh Venkitachalam。
确切地说,《Python Playground》不是一本Python语言的入门读物,它面向的是已能熟练使用Python且打算进一步提升自身Python使用技巧和知识的程序员。不过该书在解释所有相关细节方面做得相当不错,读者能很清楚地明白其中的来龙去脉。
书中每一章节对应一个项目。作者首先对项目的内容和解决方案进行初步介绍,然后详尽地讲解实现代码,在此基础上最后抛出一些试验例子以供读者自行完成。由于书籍的撰写结构良好,阅读该书无需依照特定顺序,读者可以直接切入到自己想读的任一项目章节中去,没有任何其它具体前置要求。
以下是该书涉及到的项目列表:
正如以上列表所清晰展示的,该书的目标之一即是通过尽可能地展示多种多样的案例,来表明Python在实际应用中的广泛性。颇有意思的是,为了让读者能够构建更多的专属硬件接口项目,该书最后一章还回顾了电子工程实践基础知识,包括常用组件、工具、电路搭建等。
InfoQ:请您谈一下写作这本书的目的。为什么一定要写这本书?
在很长一段时间里,我是一名C++程序员。几年以前,我开始使用Python来完成一些自动化工作。很快,我发现Python已经成为我用于计算的唯一称手工具。很多时候使用Python可以快速地完成想法初验,而不用写C++代码。我重新找回了编程的快乐。当我开始积累了一系列探索性的使用Python编程的项目经验时,我想这些积累也许能转化为一本不错的以项目为主题的书。
InfoQ:该书的目标群体是拥有一些Python编程经验的中级开发者。对于他们阅读本书您有什么样的建议?他们应期待或者不应期待什么?
市面上有很多教你学习Python语法和使用技巧的好书,我的书不打算做此类重复。《Python Playground》试图去回答这个疑问:“我对Python有一些了解。但又怎样?”这本书结合大量的项目案例介绍了在你解决特定问题或探究想法时可能会用到的库、技术和方法。所有的项目使用同样的书写结构——首先清楚地陈述问题,然后将问题分解为多个子任务,确认算法,找到合适的模块来帮助你快速形成解决方案。我希望这些项目能作为读者的跳板,帮助他们解决自己感兴趣的问题。
InfoQ:有许多针对初级开发者的Python书籍,也有不少专注于解决特定应用领域的高级书籍,比如关于机器学习、网络编程、科学计算等等。您的书和这些都不一样,您在书中试图覆盖的应用领域相当广泛。这么做的魅力之处是什么?
Python这门语言的核心功能集很小——你可以很快就学会它。在此之外,Python拥有各种类型的内置模块和第三方库,这意味着几乎在所有你想做的事情上都能找到帮手。举个例子,如果你想解析网页或是与串口进行通信,这就有现成可用的库。书中描述的具体应用对特定领域人员非常有用。不过我的目的是展示Python的广泛应用,描述这门语言是如何应用在诸多领域的。这对部分刚学会了Python但还不懂得怎么应用所学到的技术的人来说,会特别有帮助。
InfoQ:您选择项目的标准是什么?有没有哪些项目是你本想包含进来的,但出于某种原因最后放弃了?
我基于自己的个人兴趣来选择项目。很久之前,为了完成硕士学位论文,我做一些材料科学方面的计算机仿真工作——因此书中出现了conway、boids、karplus-strong项目。类似的情况,在过去的差不多20年里,我一直从事OpenGL相关的工作,所以会觉得写3D章节的内容很好玩。硬件相关的章节是源于我最近的兴趣。有些项目构思没能成功写入书中,因为我得在项目的趣味性和实现及解释项目的复杂度之间保持平衡。其中有一个没写入的项目是基于Raspberry Pi的机器人,另一个是关于变形预测的——可能你也看过这类街头艺术,当从某个特别的角度去看图像时,画面会产生3D效果。
InfoQ:您觉得哪一个项目实现起来最有趣?最难的是哪一个?
对我来说,我觉得最有趣的项目是激光音频显示器。最难实现的是体绘制(Volume rendering)项目,不过它是难在下笔时的解释说明。
InfoQ:书中还花了一整章讲硬件破解,还有一些类似C的编程。您觉得在诸如涉及硬件接口的应用方面,使用Python的优势之处在哪里?
Python可以像接口语言一样应用在硬件上,在成熟体系的计算机上完成类似于串口通信的任务是完全可以的。你还可以在类似Raspberry Pi的硬件上使用Python,它自带操作系统并对Python内置支持。后者的场景很吸引人,因为你可以在上面使用Python来直接和硬件进行对话。不过你仍然需要清楚使用Python这种运行于操作系统层之上的高级语言的局限性。在时效标准严苛的情况下,在和硬件打交道时通常必需使用更低级的语言比如C语言来编写代码。不过好消息是,一旦你完成了编码,可以很容易地创建C代码的Python绑定。举个例子,Raspberry Pi天气状况监控项目中使用的Adafruit DHT库即是如此实现的。还有我想研究的Micropython也是这个领域令人激动的开发内容。
InfoQ:您提供的代码兼容Python 2.7-3.3。为了让代码适用于尽可能多的受众,这样的选择不难理解。有没有出现这样的情况,也许能帮上忙的功能只在Python 3.X上有?您怎么看Python 2.7/3.X之间的割裂?
这本书基本上只使用Python核心功能,我把领域相关工作移交给库来处理。所以从这个意义上讲,我没有觉得自己被语言版本问题限制了。考虑到2.7/3.3之间的割裂,我赞成保持事情简单,我对2.7版本挺满意。
InfoQ:在脚本编写语言中,Python是使用最广泛的其中之一。然后,Go语言开始被视为大型Python脚本的替代物。您认为这个趋势会持续下去吗?Python是否还会像过去十年一样,仍然是适用于解决中等到复杂项目的正确的编程语言选择?
我还没研究过Go语言,所以我没有太多的发言权。因为有Google在背后支持它,我对Go持欢迎态度。我认为Python最大的魅力在于它的简洁,这是我教Python 10年来最直接的感受。每天有越来越多的人开始学习编程,随着超级廉价硬件比如售价5美元的Raspberry Pi Zero计算机的出现,我认为Python程序员会越来越多,而不是变少。
InfoQ:以您的经验来看,近期Python新增的功能(异步/等待、类型注释、异步IO、生成器等等)哪些能提高程序员的生产力?
在3.x里已经普遍使用生成器了,不过其它一些功能我认为程序员倾向于在他们有需要时才去使用,或者碰上某个特定的库或框架要求使用时才会用到。作为经历过一门复杂语言(C++)的过来人,Python对我的吸引力还是它体现出的简单和简洁。
《Python Playground》的样章下载。
Mahesh Venkitachalam是一名拥有20年编程经验的软件工程师。自八年级起,他对技术即充满激情,他名下的电子学及编程主题的博客electronut.in广受欢迎。
查看英文原文:No Starch Press' Python Playground Review and Q&A with the Author