数媒在线课堂:使用列表推导式进行函数式编程

使用列表推导式进行函数式编程

程序员总是试图用更少的代码做更多的事情,同时使代码更可靠、更容易调试。确实,计算机科学家已经开发了许多技术,每种技术都旨在让我们更接近编写简短、可靠、可维护、强大的代码的目标。

一组技术被称为 函数式编程。它旨在通过保持函数简短和数据不可变来使程序更可靠。我认为大多数开发者都会同意,简短函数是一个好主意,这在很大程度上是因为它们更容易理解、测试和维护。

但如何强制编写简短函数呢?不可变数据。如果你不能在函数内部修改数据,那么根据我的经验,函数最终会变得更短,有更少的潜在路径需要测试。因此,函数式程序最终会有许多简短函数——与非函数式程序形成对比,后者通常有更少的非常长的函数。函数式编程还假设函数可以作为参数传递给其他函数,这在 Python 中我们已经看到是可行的。

好消息是,函数式技术有潜力使代码更简洁、更优雅。坏消息是,对于许多开发者来说,函数式技术并不自然。不修改任何值,不跟踪状态,可能是使你的软件更可靠的好方法,但它们几乎肯定会令许多开发者感到困惑和沮丧。

例如,假设你在一个纯函数式语言中有一个 Person 对象。如果这个人想要更改他们的名字,你就无能为力了,因为所有数据都是不可变的。相反,你将不得不基于旧对象创建一个新的个人对象,但名字已更改。这本身并不糟糕,但考虑到现实世界是不断变化的,我们希望我们的程序能够模拟现实世界,保持一切不可变可能会令人沮丧。

再者,由于函数式语言不能修改数据,它们通常提供机制来处理一系列输入,以某种方式转换它们,并产生一系列输出。我们可能无法修改一个 Person 对象,但我们可以编写一个函数,该函数接受一个 Person 对象列表,对每个对象应用一个 Python 表达式,然后返回一个新的 Person 对象列表。在这种情况下,我们可能没有修改原始数据,但我们已经完成了任务。而且完成这个任务所需的代码通常相当简短。

现在,Python 不是一个函数式语言;我们有可变的数据类型和赋值操作。但一些函数式技术已经融入了这门语言,并被认为是一些标准 Pythonic 解决问题的方法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容