高阶函数
一等公民
- 函数在Python是一等公民(First-Class Object)
- 函数也是对象,是可调用对象
- 函数可以作为普通变量,也可以作为函数的参数 返回值
高阶函数(High-order Function) - 数学概念 y = f(g(x))
- 在数学和计算机科学中,高阶函数应当是至少满足下面一个条件的函数
+ 接受一个或多个函数作为参数
+ 输出一个函数
def add(x):
def inner(y):
return x+y
return inner
内建高阶函数
排序sorted
定义sorted(iterable,*,key=None,reverse=False)->list,不再赘述
sorted(lst,key=lambda x:6-x) #返回新列表
list.sort(key=lambda x:6-x) #就地修改
过滤filter
- 定义filter(function,iterable)
- 将可迭代对象进行遍历,返回一个迭代器
- function参数是一个参数的函数,且返回值应当是bool类型,或其返回值等效布尔值
- function参数如果是None,可迭代对象的每一个元素自身等效布尔值
list(filter(lambda x:x%3==0,[1,3,4,7,9]))
list(filter(None,range(5)))
list(filter(None,range(-5,5)))
映射map
- 定义map(function,*iterables)->map object
- 将多个可迭代对象的元素,按照指定的函数进行映射
- 返回一个迭代器
list(map(lambda x:2*x+1,range(10)))
dict(map(lambda x:(x%5,x),range(100)))
dict(map(lambda x,y:(x,y),'abcde',range(100)))
柯里化
- 指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程.新的函数返回一个以原有第二个参数的函数
- z=f(x,y)转换成z=f(x)(y)的形式
def add(x,y):
return x+y
add(4,5)
def add(x):
def _add(y):
return x+y
return _add
add(4)(5)
def add(x,y):
def _add(z):
return x+y+z
rturn _add
add(4,5)(6)