高阶函数英文叫 Higher-order function。
先来回顾一下 C 语言中指向函数的指针。如果在程序中定义了一个函数,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(又称入口地址)成为这个函数的指针。可以定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就是指向函数的指针。定义指向函数的指针变量的一般形式为:
类型名 (* 指针变量名)(函数参数列表)
下面代码展示如何使用指向函数的指针:
// 使用函数名和指向函数的指针调用同一函数
#include <stdio.h>
int max(int x, int y) {
if (x >= y)
return x;
else
return y;
}
int mian() {
int (* p)(int, int);
p = max;
int a = 5, b = 7, c, d;
c = max(a, b);
d = (* p)(a, b);
printf("a=%d, b=%d, max_c=%d\n", a, b, c);
printf("a=%d, b=%d, max_d=%d\n", a, b, d);
}
// 结果如下
// a=5, b=7, max_c=7
// a=5, b=7, max_d=7
现在回到 Python 的高阶函数。Python 也能和上述 C 语言中一样使用别的变量名调用函数,具体代码如下:
# 使用函数名和别的变量名调用同一函数
def maxN(x, y):
if x >= y:
return x
else:
return y
p = maxN
print(maxN(5, 7))
print(p(5, 7))
# 结果如下
# 7
# 7
有了上面的铺垫,下面引出高阶函数的定义:
我们知道,变量可以指向函数,而函数的参数能够接收变量,那么将一个指向函数(A)的变量传入另一个函数(B)的参数,这个函数(B)就称之为高阶函数。
下面举个高阶函数的应用例子,更深刻的理解高阶函数:
# 高阶函数的应用例子
def add(x, y, f):
return f(x) + f(y)
print(add(-5, 6, abs))
# 结果如下
# 11