代码简洁之道:一行Python代码解决问题是时尚还是玄学

博文小编

2021-10-29


所谓一行流,就是把一个功能用一行代码去实现。Python的一行流既保证了代码的简洁,又不会牺牲很大的可读性。但一个看似如此简单的事情,如果不彻底掌握这门编程语言,是很难做到的。

我认为,Python 一行流能够帮助你提高编码技能,值得去学习,其原因还有下面五个。

◎ 首先,通过提升你对 Python 核心技术的认知,可以克服许多一直在拖你后腿的编程弱点。没有对基础知识的深入理解,很难取得进步。单行代码是所有程序的基础构件,彻底理解这些基本构件之后,你才有能力驾驭高阶的复杂程序,而不会感到不知所措。

◎ 其次,你会学到如何利用当今正疯狂流行的热门 Python 库,比如数据科学和机器学习用到的那些库。本书由五个介绍单行技术的章节组成,每个都涉及 Python 的不同领域,从正则表达式到机器学习。这种方式会让你对你可以构建的 Python 应用有一个概览,同时也会教你如何使用这些强大的库。

◎ 第三,你会学到怎样写出更加“Pythonic”的代码。Python 初学者,尤其是从其他编程语言过来的人,经常会用不 Pythonic 的方式去编写代码。我们会涵盖 Python 特有的一些概念,诸如列表解析、多重赋值、切片等,所有这些都会帮你写出可读性高、便于跟相同领域的程序员共享的代码。

◎ 第四,学习 Python 单行技术,会迫使你用简洁、清晰的方式去思考。若你不得不把每个代码字符都利用到极致,就没有空间去容纳那些稀稀拉拉、不明重点的代码了。

◎ 第五,你的单行代码新技能使你能够看穿那些设计过于复杂的 Python 代码库,并让你的朋友和面试官留下深刻印象。你可能会发现,用一行代码解决具有挑战性的编程问题,既好玩,效果又令人满意。而且你不是一个人:一个活跃的 Python 极客社群一直在竞争谁能写出最简短、最 Pythonic 的代码来解决各种各样的实际(或不太实际的)问题。

Python一行流的例子

学习 Python 单行技术既是理解更高级代码库的基础,也是提升自身技能的绝佳工具。在理解几千行代码组成的代码库到底写了些什么之前,必须先了解一行代码的含义。

让我们先来快速看一眼 Python 一行流。

q = lambda l: q(u[x for x in l[1:] if x <= l[0]]) + [l[0]] + q([x for x in l if x > l[0]]) if l else []

这个单行程序对著名的快速排序算法做了优美而简洁的压缩,不过对于很多初级或中级的 Python 使用者来说,其具体含义可能还难以掌握。

Python 单行程序经常是在已有基础上搭建而成的,所以在后面中出现的单行程序,复杂度会逐渐增加。我们将从简单的单行程序开始,这些简单的语句将成为之后更加复杂的程序的基础。比如说,前面的一行流快速排序基于列表解析,但看起来又长又难。下面是一个比较简单的列表解析,用于创建一个平方数的列表。

lst = [x**2 for x in range(10)]

我们还可以把这个单行程序分解成更简单的单行,用于介绍重要的 Python 基础知识,如变量赋值、数学运算符、数据结构、for循环,成员运算符,以及 range() 函数——所有这些都出现在一行简单的 Python 程序中!

要知道,基础,并不意味着琐碎或不重要。我们即将见到的所有单行程序都很有用,而且每章会针对计算机科学中的一个独立学科或领域,让你从一个宽阔的视野全面了解 Python 的力量。

关于可读性的说明

《Python 之禅》(The Zen of Python)中包含了 Python 编程语言的19条指导原则。可以通过在 Python 命令行里输入 import this 来阅读它:

如《Python之禅》所言,“可读性很重要(Readability counts)”,单行程序是解决问题的最小化方案,在很多情况下,将一段代码改写为 Python 单行程序会提升可读性,并使得代码更加 Pythonic。例如使用列表解析将创建列表的代码缩短到只有一行。请看下面的例子:

在这个代码片段中,我们需要五行代码来生成头10个平方数的列表,并把它打印到命令行。但如果使用更佳的单行解决方案,就能以一种更易读和简明的方式做到同样的事情:

输出是完全一样的,但单行程序是基于更加 Pythonic 的概念列表解析来构建的,可读性更高,也更简洁。

然而,Python一行流也可能写得难以理解。在有些情况下,编写单行程序的解决方案,并不会让程序更加可读。但是,正如象棋大师会在动棋之前了解所有可能的行动方案,并决定何为最佳,你也需要了解所有可以表达你的想法的编码方式,如此才能从中选择最好的方式。追求最优美的解决方案不是一件低优先级的事情,而是 Python 生态系统的核心。正如《Python 之禅》所教导的:“优美胜于丑陋。”

编码能力卡住了?这本书获取可以帮助到你。

你是一位初级到中级的 Python 编码者吗?跟很多处于同样位置的人一样,你也许在编码能力进展上有点卡住了。你已经读了很多在线编程教程,也编写过自己的源代码,并成功地交付了一些小项目。你已经完成了一门基础编程课程,并且学过一两本编程教材。也许你还在大学里修过一门程序技术课程,在那里已学到了计算机科学与编程的基础知识。

你也许会受某些信念所限,比如大多数程序员理解源码的速度比你理解的快得多,或者你与前10% 的程序员差距太大。如果你希望达到高级编码水平,加入顶尖编码专家的行列,那么需要学习新的适应性技能。

小编很有同感,因为十年前刚开始学习计算机科学的时候,也觉得自己在编程上一无所知,并为此苦恼。而与此同时,我所有的同僚看起来都精通编程,且颇具经验。

借助本书,希望帮助你们克服这些限制自我的想法,让你们朝着成为 Python 专家的方向更进一步。

你会学到什么?

下面是你会学到的内容的概述。

1 Python温故知新 介绍 Python 的基础知识,让你重新检视自己的 Python 知识。

2 Python技巧 包括10个一行流技巧,帮助你熟练掌握基本知识,例如列表解析、文件输入、lambda函数、map()和zip()、all()量词、切片,以及基础的列表运算。你还会学到如何引入和操作各种数据结构,利用它们来解决各种各样的日常问题。

3 数据科学 包含了数据科学方面的10个一行流程序,全部基于 NumPy 库构建。NumPy 处于 Python 强大的机器学习和数据科学能力的核心,你将会学到基本的 NumPy 知识,如数组、形状、轴、类型、广播、高级索引、切片、排序、搜索、聚合与统计。

4 机器学习 涵盖了使用 Python 的 scikit-learn 库进行机器学习的10个一行流程序,会涉及值预测的回归算法,这些算法的例子包括线性回归、K-近邻算法和神经网络。你也会学到分类算法,比如逻辑回归、决策树学习、支持向量机和随机森林。此外,还会学习如何计算多维数据阵列的基本统计数据,以及用于无监督学习的 K-Means 算法,这些都是机器学习领域最为重要的算法与范式。

5 正则表达式 包含10个一行流程序,帮助你用正则表达式实现更多的目标。你会学到各种基本的正则表达式,并把它们组合(然后再组合)以创建更加高级的正则表达式,还会学习如何使用分组和命名组、反向查找、转义字符、空白字符、字符集(以及反向字符集)和贪婪/非贪婪运算符。

6 算法 包含了10个一行流算法程序,涉及广泛的计算机科学主题,包括拟合、回文、超集、换元、阶乘、质数、斐波那契数列、混淆、搜索和基于算法的排序。其中许多内容将构成更高级算法的基础,是进入全面系统的算法学习的良好导引。

后记 总结全书,让你带着升级后的全新 Python 编程技能,去面对真实世界的考验。



《Python一行流:像专家一样写代码》
关于作者
克里斯蒂安·迈耶(Christian Mayer)是一位计算机科学博士,也是知名 Python 网站finxter(网址见链接列表“文前3”条目)创始人和维护者。该网站非常活跃,内容订阅人数已经超过2万且仍在持续增长。他的网站不仅发展迅速,也帮助数以万计的学习者提升了编码技能和优化在线业务。克里斯蒂安同时也是《Python咖啡时间》(Coffee Break Python)系列自出版图书的作者。

关于译者
苏丹,网上id一般为su27,2009年毕业于北京师范大学数学系,主要从事后端编程工作,也曾从事前端与客户端开发工作。在Python的“黄埔军校”豆瓣团队中成长,目前为豆瓣用户产品后端负责人,日常跟Python打交道较多。

关于本书

《Python一行流》会教你阅读和编写一行流程序,系统性拆分和理解任意一行Python代码,像专家一样得心应手地编写强壮、紧凑的Python程序。本书有5个章节,覆盖了编程技巧、正则表达式、机器学习、数据科学的核心课题,以及许多有用的算法。通过对单行程序范例的详细介绍,本书解释了计算机科学的关键概念,并可用来提升编码与分析的重要技能。你会学到Python的进阶功能,例如列表解析、切片、lambda函数、正则表达式、map和reduce函数,以及切片赋值等。

(京东限时49元包邮,速抢!)

读者评论

相关博文

  • 社区使用反馈专区

    陈晓猛 2016-10-04

    尊敬的博文视点用户您好: 欢迎您访问本站,您在本站点访问过程中遇到任何问题,均可以在本页留言,我们会根据您的意见和建议,对网站进行不断的优化和改进,给您带来更好的访问体验! 同时,您被采纳的意见和建议,管理员也会赠送您相应的积分...

    陈晓猛 2016-10-04
    5443 739 3 7
  • 迎战“双12”!《Unity3D实战核心技术详解》独家预售开启!

    陈晓猛 2016-12-05

    时隔一周,让大家时刻挂念的《Unity3D实战核心技术详解》终于开放预售啦! 这本书不仅满足了很多年轻人的学习欲望,并且与实际开发相结合,能够解决工作中真实遇到的问题。预售期间优惠多多,实在不容错过! Unity 3D实战核心技术详解 ...

    陈晓猛 2016-12-05
    3307 36 0 1
  • czk 2017-07-29
    5893 28 0 1