高阶函数
高阶函数语法
其实高阶函数是函数式编程里面的一些概念,更深入的讲其实是来源于数学里面的一些概念,这里用Python来说明一些常见的概念,如果感兴趣可以学习别的函数式编程的语言。
代码语言:javascript复制def func(g,arr):
return [g(x) for x in arr]
在以上的代码中,func是一个高阶函数,它接收两个参数,第一个参数是函数,第二个函数是数组,func的作用是将函数g逐个的作用于数组arr上,并返回一个新的数组,并且返回一个新的数组,比如我们可以写一个例子看看:
代码语言:javascript复制def double(x):
return 2*x
def square(x):
return x*x
arr1 = func(double,[1,2,3,4])
arr2 = func(square,[1,2,3,4])
我们总结一下,可接受其他函数作为参数的函数被称为高阶函数。
map函数
map函数是一个内建的高阶函数。
map函数的使用形式是:
代码语言:javascript复制map(function,sequence)
解释:对sequence中的item依次进行执行function(item),并将结果组成一个List返回,也就是:
代码语言:javascript复制[function(item1),function(item2),function(item3),function(item4),function(item5)...]
N-COUNT (系列物品或清单中的)一件 An item is one of a collection or list of objects.
我这里对item进行了一些解释,就是一个打包的数据结构里面的元素一个一个的输出出来,就像一个流水线一样,一个接着一个的工件来处理
代码语言:javascript复制def square(x):
return x*x
print(map(square,[1,2,3,4]))
map(square,[1,2,3,4])
这个是map的一个例子,注意的是Python3的Map函数返回的是一个迭代器
reduce函数
reduce函数的使用形式是:
代码语言:javascript复制reduce(function,sequence[,initial])
解释:先将sequence的前两个item传给function,就是这样想,值1,值2给值3,是做的一种迭代的操作,直到sequence没有元素,如果有initial,则作为初始值调用。
代码语言:javascript复制reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)
filter函数
这个函数我觉得可以,见名知其意了吧,filter函数用于过滤元素,它的使用元素.
代码语言:javascript复制filiter(function, sequence)
解释:将function依次作用于sequence的每个item,既function(item),将返回的值为TRUE的item组成一个List/String/Tuple(取决于sequence的类型,python3的话,统一返回迭代器)。