本书专注于从初学迈向进阶的Python编码技术:如何像专家一样写出优雅、准确、简洁高效的Python 单行代码;阅读任意一行Python 代码时,如何系统性地对其进行拆解和分析。全书分为6 个章节,以单行代码切入计算机科学的各个领域,包括Python 语言基础、编程技巧、基于NumPy的科学计算、机器学习的主要算法模型、正则表达式进阶、计算机科学中若干经典算法的单行实现等。
本书译者su27|赖勇浩|大妈|洪强宁|清风|py六大Python元老作序力荐此书|力挺一行流阵营,一行流——升格编码行家的试金石|超一流匠师的编程信仰
推荐序一:干一行,爱“一行”
几年创业,几经浮沉,我又回到了编码一线,重拾写代码的乐趣。幸好当年读过几本经典书籍打底,如今重操旧业,尚能游刃有余。感慨中刚好春雨兄找我为《Python一行流》作序,读来很有感触,堪比当年经典,便欣然应允。
其实我一直是“一行流”的爱好者。早在使用 Python 2.3 版本的时代,我便尝试如何用一行代码完成字符串里的字符排序,并将过程和结果记录在博客 1 上。虽然自从 Python 2.4 版本增加了 sorted()函数后我的奇技淫巧便没了用武之地,但这种追求精确与极简的 Pythonic 哲学持续地影响着我,多年后我以改善 Python 程序为名出版了自己的第一本书。
与我的浅尝辄止不同,这本书把一行流当作了一个研究课题,所以整书极具体系。作者从 Python 语言、库和算法多个层面和角度去探寻更简明的代码写法,有助于读者建立深入挖掘语言特性的动力,最终提升读者的知识水平,写起代码如臂使指,“码”上生花。我曾在网上分享过一段利用数字图像形态学实现茶滤孔数计算的Python 程序,需要 80 行代码,而网友 Arkbird 用一行 mathematica 代码完成同样的算法,“我看不懂,但我大受震憾。” 读者们纷纷点赞。编写一行流的代码是一个“好程序员”的普遍追求,也是对语言、库和算法的掌握程度和编码能力的体现,但阅读本书显然有助于此,读完本书后我编写了自己的“一行流”版本:
print(("holes count: ", s := __import__('skimage', fromlist=['measure', 'morphology','io']))[0],
s.measure.label(s.morphology.binary_opening(s.io.imread("sample.png", as_gray=True) <0.5, selem=s.morphology.square(3)), return_num=True)[1])
代码行数“浓缩”80 倍之后,性能也提升了 37 倍,同时自我感觉对 Python 语言、skimage 库和数字图像算法的理解更进了一步。许多初学者入门后陷入不知道能用 Python 做什么的困惑,不妨读一下这本书,然后尝试把之前写过的代码改为“一行流”风格,应该能大有所获。
本书译者苏丹网名 su27,他是圈内驰名“文艺青年”,前几年一直听说他在写小说,搞文学创作。作为长年混迹文青基地豆瓣网的程序员,这并不奇怪,奇怪的是他突然翻译了这本书。不过 su27 毕竟是在 Python 的“黄埔军校”豆瓣团队中成长起来的,这对本书的品质提供了保障。在阅读这本书的过程中,也印证了我的所想,整本书清晰明了,极具美感,加上作者精心编排的知识体系,读来如上云梯,愉悦中知识就获得了提升,是以为序。
——赖勇浩
广州齐昌网络科技有限公司创始人兼总经理
《编写高质量代码:改善Python程序的91个建议》作者
推荐序二:Su27 般大气凌然
(Su27 当然比 Mig29 大气)
一直以为 Su27 在写科幻小说,
突然邀请来为新书写序,
只能感叹:
不会写科幻小说的程序员一定不是好翻译
一看内容,更感叹,探讨领域竟然如此“宅”:
专注揭露
如何在 Python 中
编写能浓缩在单行的
神级 Pytonic 代码
讲真,Guido 老爹当年将 lambda 引入 Python 时,就劝过:
函式编程虽好,可别贪杯;
为此专门重新设计语法,
将 Python 构造为唯一基于排版来划分语法层次的通用脚本语言;
要知道,其它通用语言都通过标识符
(比如:{} begin end)来划分代码块,
本质上无论软件由多少行构成,
都可以写在一行里,
而编译器照样可以完美解析;
(实际上,很多混淆器就是这么干的.)
这样一来,
在 Python 中无论初中高级,
大家写出来的代码,
都会很相似,
很直白,
结构很清晰
但是,
脑力过剩的程序员当然要为智商寻求宣泄,
果断发现 Python 内置的炫酷可能性:
通过列表推导式,
就可以轻易绕过缩进规约,
将几个想法集中进一行,
配合 Lambda 就可以将更多行为集成到一行中;
立即,
代码看起来就不那么泯然众人矣 -> 第一眼根本看不明白要干什么
确实,这些可能性,
毕竟是老爹精心掩埋的珍宝,
以往也只有零星文章介绍几个案例,
这次是一整本书,可以大大过瘾;
翻译没毛病,老程序猿了;
版式也够 geek,
清晰区分了内容/代码/注释/点评;
(可惜,译者太自谦,
没好意思大力插入丰富译注,
将自己经验也配套给出,
下个版次,值得追加.)
内容上,结构清晰,
从语法,到模块,
到第三方模块,
并第一时间构建了自己的 元述式:
0: 问题阐述
1: 常规处理
2: 一行流代码
3: 如何工作的? 解析
这样一个个案例,
就象一片片精致的卡片,
有序拼贴起来,形成 一行流 小世界,
同时,
每个案例故事,
又都是能独立使用的,
随时可以拎出来用在具体工程中;
这应该是流式图书构建法
只可惜,没见到 海象表达式:= 相关案例,
这种新语法在 Python 3.8 中正式引入,
支持直接在列表推导式中进行复杂的判定,
结合迭代工具,简直可以在 ["列表"] 中构造整个儿世界;
真心建议,在修订版中,Su27 亲自补一章,将:= 结合到实用场景中,
作为中国版一行流大补丁,反馈回作者心上.
——大妈/ZoomQuiet PyUG 联合创始人,蟒营 ? 创始人
推荐序三
看到 su27 老师翻译的这本书,我不禁哑然失笑,十几年前我还在中国 Python 用户组的邮件列表里活跃的时候,经常花大量精力和同好们讨论怎么把一段程序写成一行流,一定要找出既简洁又高效的方法来才肯罢休,乐此不疲。从这个游戏出发,逐步形成了如何写出更加 Pythonic 的代码来的认知,而这个美学层面的认知升级,我至今受益不止。编码是快乐的,希望有更多人能从这种“寻找极致”的过程中,体会到代码之美。
——洪强宁 雅识科技联合创始人兼CTO
推荐序四
谈起 Python,从 2000 年到 2021 年,一门陪伴了我 20 多年的编程语言,其他语言大多是生命的过客,或者因为某些需求临时起意而去学习使用,但唯独 Python,从始至终用到了现在,但即便用了这么久,都不敢轻言对于 Python 已经彻底了解,尤其谈起一行流,更是各种编程语言论坛里最爱比拼的项目之一,所谓一行流,就是能不能把一个功能用一行代码去实现,Python 的一行流既保证了代码的简洁,又不会牺牲很大的可读性,但一个看似如此简单的事情,如果不对这门编程语言掌握的非常透彻,是很难做到的。如此有趣的主题,这么多年来,却很少看到这个主题的图书,这次有幸读到这本书,也从中学到了很多,尤其是机器学习和算法两个章节,读过之后感觉醍醐灌顶,马上就可以把所学应用到日常工作中去了。同时,本书的翻译者 su27 老师本身也是资深的 Python 开发者,在翻译的准确度和流畅度方面,本书也远超同类图书。最后,很荣幸为此书写序,甚感开心,预祝此书大卖,能够帮助到更多的 Python 学习者与开发者。
——清风 前豆瓣技术总监,开 PA 创始人
推荐序五
《Python 一行流》 是一本适合 python 程序员进阶的书,帮助读者更好地领悟python 编程的思维方式。整本书从解决实际问题出发,通过一行流的形式,简洁清晰的解决问题,很多例子都给出了非常新颖的角度。更为难得是,作者并非一味的追求一行流,在多行代码能够带来更好阅读性的时候,作者也欣然推荐指出此处一行流的不住。苏老师的翻译流畅准确,阅读起来非常舒服,无论是中阶 python 程序员还是高阶程序员,相信通过阅读此书都能有所收获。
——彭宇 豆瓣平台架构负责人
译 者 序
大约 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 玩家“打怪升级”提供一件称心的装备,做一盏指路明灯,驱散迷雾,打开地图视野,明确职业生涯前进的路线。
正文第16页,文中内容”直观的讲,堆栈数据结构是以先进先出(FIFO)方式工作的”出现错误,堆栈数据结构应该是后进先出(FILO),队列数据结构的工作方式才是先进先出(FIFO).