Logo
Section 1 / 6

介绍函子、应用型和单子

了解函子、应用型和单子。

导入

介绍函子、应用型和单子

了解函子、应用型和单子。

函子与单子

函子(Functors)和单子(Monads)是函数式编程中两种重要的对象类型。它们的理论基础源自较为抽象的数学概念,但在这里我们更关注它们的实际优势。

本质上,它们的作用是包装一个值。这个包装器控制着函数如何作用于该值,从而扩展了普通函数的能力。例如,可以让函数自动处理集合数据,或处理可能不存在的值(某些语言中称为“可选值”)。

实际上,存在三种相关联的类型:

...
三种相关对象类型
  • 函子是最基本的类型。函子具有一个 map 方法,用于控制函数如何被应用到其内部的值上。

  • 应用型函子(也常简称为“应用函子”)是函子的一个子集。应用函子不仅能完成函子的所有功能,还具备额外的能力。所有应用函子都是函子,但并非所有函子都是应用函子。

  • 单子是应用函子的一个子集。单子可以完成应用函子的所有操作,并且还有更多能力。

这些对象并不是 Python 标准库的一部分,但你可以使用一些第三方库。本章将使用 oslash 库,它提供了非常不错的函子实现。详见常用库章节。

这里关于函子的大部分通用概念也适用于其他库甚至其他语言。不过大部分语法是 oslash 特有的,其设计主要受到 Haskell 语言的影响。

你可能会发现,自己并不经常使用函子和单子。它们在纯函数式语言中主要用于处理那些难以用过程式代码解决的情况。而在 Python 中,由于本身就支持过程式编程,因此你通常会更倾向于使用传统方法而非单子。但了解它们的存在仍然是很有价值的。

部分应用与柯里化

函子