译者序
大约14年前,我是个前端程序员,虽然没学过Python,但小伙伴们写的Python代码十分好读,我看着就有种无师自通的幻觉,有时候自己也写一些。虽然能跑通,但老觉得不对劲,生涩、重复、结巴,好像刚学了两天英语就非要跑去跟老外聊天一样。有个后端工程师叫PY(巧了不是?),我有时就把自己写的发给他,让他帮我改,我想要“像Python一些”,果然他一改就流畅了很多,变得又短又好读了。那时候我也帮后端改JavaScript,但现在想来当时水平十分一般,真是惭愧。
后来我经常想,到底是什么让代码看起来“更Python”了。是一些Python独有的关键字和语法吗?是函数式编程吗?是强大的动态特性吗?是黑魔法元编程吗?也许是,又不是。写了多年后端,我仍然不认为自己掌握了其中的秘诀,但我知道窍门一定隐藏在一行行朴实、优雅又节制的Python语句之中。
最近看了不少年轻朋友的简历和笔试答卷,很多人简历上写了“熟悉Python”,甚至做过Python项目,用Python写了网站或者应用程序之类。但打开笔试中实际的Python代码,有时候只需要两三行,就能看清底细。也许程序能跑通,甚至答案也对,但就是知道他们跟Python一点都不熟;他们知道Python的语法,但又不知道Python怎么写;该简洁的地方冗长,该清晰的地方意义不明,充满了多余的循环和分支,毫无技巧可言,不会用正则表达式,更不要提不规范的空格和换行。读这样的程序让人焦虑烦躁,到处都在浪费空间、性能和阅读者的时间,到处都在催促我赶紧把页面关掉。看多了这样的程序,会让我觉得Python很没意思。
我想,或许他们实力不弱,但如果把这样的代码贡献到开源社区,恐怕每一行都会经受一番严厉的拷问。也许他们的确花了不少时间在学习和练习使用Python,但可惜没有接触过真实世界的合作开发,没有经受过复杂项目的代码审核,没有一个人或者一本书确切地告诉他们,如何把简简单单的一行Python代码写好。不仅仅是写到能通过编译,而是写好,这是业余选手和职业玩家的区别。
第一次看到书名中“一行流”这个词时,我心中浮现的是JavaScript的单行程序打包器,或者C语言混乱代码大赛这样的东西,很多语言都有在一行代码中玩出各种花样的奇技淫巧。但我又注意到,这是一本Python的书。常识告诉我,没有任何一本讲Python的书敢违反至高无上的《Python之禅》(尤其是“Readability counts”)。果然,这本书讲的正是我觉得十分重要,但一直少有专著的主题:如何写出真正Pythonic的单行程序。在这一主题下,作者从基础出发,一步步增加挑战。在我看来,他把这个问题在本书中分为几个层次,按照挑战难度及章节的前后顺序教你:
1.如何把你的每一行程序写得简洁漂亮、Pythonic。
2.如何仅用一行程序,巧妙地解决实际问题,但又不会过分聪明以至于影响可读性,并且满足第一条。
3.使用Python可以涉足计算机科学的哪些领域?全都用一行程序搞定,同时还得满足前两条。
《Python之禅》有云,达成某个任务的最佳编码方式,有且仅有一种。这导致在Python范畴内讨论单行程序的威力,是需要极度谨慎的,因为即便再精妙和强大的单行程序,如果它不是“那一种”方式,就没有人会在实践中使用,也就只是个玩具,而没有实用的价值。作者在选择例子的时候十分小心,即使再复杂的例子,理解之后也会觉得,确实是最好的选择。同时也会为之惊叹,短短一行,竟有如此强大的能力,就算是在机器学习、科学计算这种专业程度很高的领域也能游刃有余。
希望手头的这本小书,能为Python玩家“打怪升级”提供一件称心的装备,做一盏指路明灯,驱散迷雾,打开地图视野,明确职业生涯前进的路线。
关于作者
克里斯蒂安·迈耶(Christian Mayer)是一位计算机科学博士,也是知名Python网站finxter(网址见链接列表“文前3”条目)创始人和维护者。该网站非常活跃,内容订阅人数已经超过2万且仍在持续增长。他的网站不仅发展迅速,也帮助数以万计的学习者提升了编码技能和优化在线业务。克里斯蒂安同时也是《Python咖啡时间》(Coffee Break Python)系列自出版图书的作者。
关于技术审查员
丹尼尔·辛加罗(Daniel Zingaro)博士是多伦多大学计算机科学的助理教授和获奖教师。他主要的研究领域为计算机科学教育,研究学生是如何学习(或者不学习)计算机科学知识的。他是《算法思维》(Algorithmic Thinking,由No Starch Press出版)一书的作者。
关于译者
苏丹,网上id一般为su27,2009年毕业于北京师范大学数学系,主要从事后端编程工作,也曾从事前端与客户端开发工作。目前为豆瓣用户产品后端负责人,日常跟Python打交道较多。2016年翻译出版《深入理解Flask》一书。