2.1.4 高阶函数

高阶函数是指输入参数为一个(或一组)函数或返回值为函数的函数。

让我们分别看看这两种情况的例子。

1. 函数作为输入参数

假设我们想写一个函数,它可以多次执行另一个函数。我们可以这样实现:

如你所见,repeat_fn函数的第一个参数是另一个函数,它被重复执行,执行次数由第二个参数给出。然后,我们定义了另一个函数say_hi,它会在屏幕上输出字符串“Hi there!”。调用repeat_fn函数并传入say_hi的结果是屏幕上的五个问候语。

我们可以使用一个匿名的lambda函数来重写这个例子:

lambda函数使我们不必再定义一个函数来输出信息。

2. 函数作为返回值

让我们来看看一个返回另一个函数的函数。假设我们想要定义一个验证函数,以验证一个字符串是否包含某些字符序列。我们可以编写一个名为make_contains_validator的函数,它接受一个序列并返回一个函数,来验证字符串是否包含该序列:

我们可以使用这个函数来生成验证函数,如下所示,

可以用这个函数来检查输入的字符串是否包含符号@:

高阶函数非常有用,之后会用到。