前言
哈喽大家好,我是知道。
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。
Python中的函数是对象,可以复制给变量,而且允许把函数本身作为参数传入另一个函数,还允许返回一个函数。
高阶函数
高阶函数英文叫Higher-order function。什么是高阶函数?我们以实际代码为例子,一步一步深入概念。
变量可以指向函数
变量f已经指向了abs函数本身,直接调用abs()函数和调用变量f()完全相同。
传入函数
既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
定义一个简单的高阶函数:
参数x,y和f分别接收-5,6和abs,所以函数结果就是abs(-5) + abs(6)=11
map函数
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。
reduce函数
reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算:
对一个序列求和,就可以用reduce实现:
filter函数
和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。filter()函数返回的是一个Iterator,也就是一个惰性序列,同样需要通过list()函数让它把返回结果变为list。
filter()这个高阶函数,关键在于正确实现一个“筛选”函数。
sorted函数
sorted()函数是一个高阶函数,它可以接收一个key函数来实现自定义的排序,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。例如按绝对值大小排序或者按照小写字母顺序进行排序:
要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
总结
领取专属 10元无门槛券
私享最新 技术干货