高阶函数与函数的柯里化

版权声明: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")

输出结果为:
higfun001

内建高阶函数

  • 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,没输出
    
    higfun002
  • 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)
  • 通过嵌套函数就可以吧函数转换成柯里化函数

猜你喜欢

转载自blog.csdn.net/u013008795/article/details/89379509