版权声明:qq:1263351411 https://blog.csdn.net/u013008795/article/details/89379509
高阶函数与函数的柯里化
- 数学概念y=f(g(x))
- 在数学和计算机科学中,高阶函数应当是至少满足下面一个条件的函数
- 接受一个或多个函数作为参数
- 输出一个函数
- 简单高阶函数示例:
##高阶函数一,调用后返回值是函数
def funn1():
def fun(x):
return x+5
return fun
###高阶函数二,调用时需要接受一个函数
def funn2(fun):
y = fun(5)
return y
自定义sort函数
仿照内建函数sorted,自行实现一个sort函数(不使用内建函数),能够为列表元素排序
- 简单实现
def sort(iterable,*,key=None,reverse=False):
newlist = []
for i in iterable: #遍历集合
ki = key(i) if key else i #将i的值使用key函数值替换
for k,v in enumerate(newlist): #遍历已有集合
kv = key(v) if key else v #将k的值使用key函数值替换
if (kv < ki) if reverse else (kv > ki): #根据reverse判断是升序函数降序
newlist.insert(k,i) #使用insert在指定位置插入值
break
else:
newlist.append(i)
return newlist
arr = [1,9,2,6,6,5,4,3,2]
print(sort(arr),sort(arr,key= lambda x: -x),sort(arr,reverse=True),sep="\n")
输出结果为:
内建高阶函数
- sorted(iterable,*,key=None,reverse=False)->list 返回一个新的列表
- iterable:可迭代对象
- key:是个参数函数,指定排序规则函数
- reverse:是否翻转(降序函数升序)
- filter(function,iterable)->iterab 返回一个迭代器,过滤等效为False的值(当function为None时过滤等效为False的值。如果不为None需要定过滤规则)
- function:是个参数函数,且返回值应当是bool类型,或其返回值等效布尔值。默认值是None则可迭代对象的每一个元素自身等效布尔值
- iterable 可迭代对象
print([_ for _ in filter(None,range(5))]) # 注意0等效False,没输出 print([_ for _ in filter(lambda x: x%3==0,range(10))]) # 注意不能被3整除的数等效Fasle,没输出
- map(function,*iterables)-> map object返回可迭代对象。#对多个可迭代对象的元素,按照指定的函数进行映射。(带入函数,返回函数计算出来的返回值)
- function:是个参数函数
- iterables:可迭代对象(如果是多个,需要用位置传参)
函数的柯里化
- 函数的柯里化指的时将原来接受两个参数的函数,变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数
- z=f(x,y)转换成z=f(x)(y)
例如:
def add(x,y):
return x+y
柯里化后:
def add(x):
def add(x,y):
return x+y
def _add(y):
return add(x,y)
return _add
add(5)(8)
- 通过嵌套函数就可以吧函数转换成柯里化函数