一 前言
本篇内容是关于一些高阶函数基本使用的知识,其目的主要是简化代码,更加精炼;
公众号:知识追寻者
知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)
二 高阶函数
2.1 高阶函数概念
函数式编程为高阶函数(Higher-order function);函数式编程是指将一个函数作为另一个函数参数的编程方式;一般情况下使用函数式编程通常都会使用到匿名函数简化代码;
2.2 高阶函数示例
如下所示,定义过滤函数filter,如果函数值大于5就返回入参,否则返回None;
将 filter 函数 作为 getNumber 函数的第一个入参,在函数体调用filter函数对第二个入参arrs进行值的过滤操作;
最后对filter(num)进行判定,如果是None不入新的列表,否则加入列表;
# -*- coding: utf-8 -*-
# 对数组 arr 进行过滤
def getNumber(filter,arrs):
return [ filter(num) for num in arrs if filter(num) is not None]
# 定义过滤函数
def filter(num):
if num > 5:
return num
else:
pass
result = getNumber(filter,list(range(0,10,2)))
print(result)
输出
[6, 8]
三 内置函数
常用的内置高阶函数如下;
3.1 map()
map函数接受两个参数,一个是函数,一个是序列;map将传入的函数依次作用于序列中的每个元素,将结果作为新的列表返回;
如下示例,传入匿名函数,其作用是对列表list中的每个值进行乘2,对新的值组成列表并返回;
anno_map = map(lambda x: x * 2, list(range(0,10,2)))
print(list(anno_map))
输出
[0, 4, 8, 12, 16]
3.2 reduce()
reduce():函数接收两个参数,一个是函数,另一个是序列;函数必须接收两个参数,reduce将序列的前一个参数和后一个参数进行累计计算的结果返回;
如下示例 将 0,2,4,6,8 进行累加的结果进行返回;
from functools import reduce
anno_reduce = reduce(lambda x, y: x + y, range(0,10,2))
# 20
print(anno_reduce)
3.3 filter()
filter():筛选过滤函数;将传入的函数,依次作用于每个元素,如果函数返回值是True就保留否则丢弃;
如下所示,对[0,10)的数字进行判定,如果能被2整除就保留,否则丢弃;
anno_filter = filter(lambda x: x % 2 == 0,list(range(10)) )
print(list(anno_filter))
输出
[0, 2, 4, 6, 8]
3.4 sorted()
sorted() 是排序函数 , 其参数如下
iterable
是一个序列key
可计算的排序函数,用于自定义排序;reverse
排序规则,reverse = False 升序(默认),reverse = True降序;
如下示例,key的函数进对列表中的每个元素进行作用,对运算后的结果进行大小比较,默认是升序;
anno_sorted = sorted([2,1,5,3,7], key=lambda x: x * x)
print(anno_sorted)
输出
[1, 2, 3, 5, 7]