大家好,这里是三岁接下来带来的是传说中的高阶函数,如有不足请大家多多指出
什么是高阶函数。
python支持函数式编程,但是并不是函数式编程
高阶函数需要符合以下条件(两个满足一个即可):
- 接收一个或多个函数作为参数。
- 将函数作为返回值返回
特色:
- 变量可以指向函数
- 函数名就是指向函数的变量
(emmm,小编其实也不是很理解这两句话)
让我们看看会介绍到的几个实例:
- map()
- reduce()
- filter()
- sorted()
map()
map函数:把传入的值依次给前面的函数
使用方法:map(func, *iterables)
func 代表传入的一个函数
*iterables 代表要传入函数的值
结果会做为一个新的迭代器返回
也就是把后面的值映射到前面的函数中去
话不多说,上例子;
print(list(map(lambda x : x ** 2 , range(10))))
结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
emmm 翻译一下
输出一个列表,列表由一个map()构成
map()里面是一个匿名函数和一串值
匿名函数代表一个值的平方
上面的代码等同于:
def square(x):
x **= 2
return x
map_list = list( map(square, range(10)) )
print(map_list)
结果
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
图丑勿怪,但是就是这个意思
三岁白话时间:就是把后面列表里面的值逐个给前面的函数返回一个迭代器,可以用列表或循环的方式输出
reduce()
reduce():把后面的值给一个二元操作函数,并将结果与列表中的下一个值继续操作。
比较绕,慢慢来,先康康使用方法
reduce(func, *iterables)
func代表一个二元操作函数
*iterables 代表要操作的集合
返回迭代以后的结果
看操作
from functools import reduce #导入函数
print(reduce(lambda x,y : x + y , range(1, 101)) )
结合
5050
注意:python3 中reduce()要到functools模块中查找
解析:输出1到100的和
复杂(易懂写法):
from functools import reduce #导入函数
def addnums(x, y): #创建函数
return x+y
print(reduce(addnums,range(1, 101)) )
不是很清晰,但是差不多这个意识,大家克服理解理解
白话时间:后一个数和前两个的结果反应生成新的结果
filter()
filter():python中内置的用于过滤的函数
使用方法: filter(func, *iterables)
func:判断函数,返回 True 或 False
*iterables:被判断的集合
*iterables会逐个作用于func函数对于返回False的进行删除
返回的结果也是一个迭代器,需要特殊处理后输出
话不多说上例子:
print(list(filter(lambda x : x % 2 == 0,range(1,20))))
结果:
[2, 4, 6, 8, 10, 12, 14, 16, 18]
输出1到19里面的所有的偶数
def even_number(data):
return data % 2 == 0
print(list(filter(even_number,range(1,20))))
结果:
[2, 4, 6, 8, 10, 12, 14, 16, 18]
两个函数相同,一个用了匿名函数一个用自定义函数
输出1到19里面的所有的奇数
print(list(filter(lambda x : x % 2 == 1,range(1,20))))
结果:
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
sorted()
sorted():快速排序函数,可以对所有的可迭代对象进行排序,实质上是两个元素之间的比较
使用方法:sorted(*iterables, key = None, reverse=False)
*iterables可迭代对象(要排序的集合)
key 指点函数(排序方式)
reverse 排序规则 True表示降序,False表示升序
返回一个新的lsit(列表)而不是在原有列表上进行修改
list = [3, 6, 2, 8, 7,4]
print(sorted(list))
结果
[2, 3, 4, 6, 7, 8]
因为key = None, reverse=False 有默认值所以可以直接进行排序
list = [3, 6, 2, 8, 7,4]
print(sorted(list, reverse=True))
结果
[8, 7, 6, 4, 3, 2]
通过关键字修改参数后变成了降序排列
emmm,并没有调用函数怎么能够说是高等函数呢?
这个函数不高等! 不急,安排!!!
list01 = [6, -5, 9, -3,-8]
print(sorted(list01))
结果
[-8, -5, -3, 6, 9]
#使用绝对值进行排序
list01 = [6, -5, 9, -3,-8]
print(sorted(list01, key= abs))
结果
[-3, -5, 6, -8, 9]
使用了abs() 以后就是对列表中的数值的绝对值进行排序
其他的使用方式进行类推即可
今天的高等函数就到这里啦,这里是三岁,白话带你学编程。
记得点赞评论加收藏呦!!!