什么叫高阶函数
接收函数作为参数,或者将函数作为返回值的函数是高阶函数 ,满足二者其一即为高阶函数。
当我们使用一个函数作为参数时,实际上是将指定的代码传递进了目标函数。
常见内置高阶函数
map
根据提供的函数处理序列中的元素,处理完成之后返回一个迭代器对象,map的第一参数为一个函数 ,后续的参数会传给这个函数。
num = [*range(1,6)] # 需求:将num中所有元素都乘以2返回
普通实现方法
def fn(x): new_num = [] for i in x: new_num.append(i * 2) return new_num list2 = fn(num) print(list2) 返回结果 [2, 4, 6, 8, 10]
利用map函数实现
def fn1(x): return x * 2 list3 = list(map(fn1, num)) # map结果返回的是迭代器,可以转换为列表 print(list3) [2, 4, 6, 8, 10]
使用map结合lamda实现
list4 = list(map(lambda n: n * 2, num )) print(list4) [2, 4, 6, 8, 10]
filter
filter()可以从序列中过滤出符合条件的元素,保存到一个新的序列中。
参数:
1.函数,根据该函数来过滤序列(可迭代的结构)
2.需要过滤的序列(可迭代的结构)
返回值:
过滤后的新序列(可迭代的结构)
num = [*range(1,6)] # 需求:将num中所有奇数取出来组成一个新的list def fn(x): if x % 2: # 除以二等于0的是偶数,就是假 return x list5 = list(filter(fn, num)) # 返回的也是迭代器,可以转换成列表,如果不用filter的话就需要for来循环处理 print(list5) # 返回值 "D:\PyCharm 2021.3.3\dtest\aliang-py\Scripts\python.exe" "D:/PyCharm 2021.3.3/aliang-py/装饰器.py" [1, 3, 5]
同样,也可以结合lamda实现
list6 = list(filter(lambda x:x % 2 != 0, num)) print(list6)