我是变量,不,Python说你是函数
前言 哈喽大家好,我是知道。 函数是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: 总结 |