高阶函数应当满足至少下面一个条件:
接受一个或多个函数参数
输出一个函数
下面用一个例子来理解高阶函数。
一、高阶函数
先看一个简单的函数
例一:
例二:
是高阶函数,因为满足条件,返回一个函数
并且有闭包,在内层函数inc中调用了外层counter函数中的形参base。
再来看下面一个问题:
为什么?
==是值内容相等,而f1是counter函数指向的函数对象,inc标识符岁函数调用而消亡,但inc内部所指的对象没有消亡,被f1记住了,f2同理,如果使用了==,因为在对象上是不能进行比较的,且f1和f2所处的内存空间位置不一样。所以f1 is f2是False ,f1==f2也是false。
二、sorted原理
仿照内建函数sorted,执行实现sort函数(不能使用内建函数),且能够为列表元素排序。
使用reverse控制升序和降序,使用key设置一个用于比较的函数。
思路:新建一个列表,遍历原列表,和新列表中的值依次对比,决定带插入数插入到新列表什么位置。
完整代码
三、filter过滤
filter(function,iterable)
对可迭代对象遍历,返回一个迭代器
function是一个参数的函数,且返回应当是bool类型,或返回其等效布尔值
function如果是None,可迭代对象每一个元素自身等效布尔值
如:
四、map映射
map(function,*iterable)
对多个可迭代元素按照指定的函数进行映射
返回一个迭代器