python基础-------------高阶函数 & 柯里化

高阶函数

一等公民
函数在Python是一等公民(First-Class Obiect)
函数也是对象,是可调用对象
函数可以作为普通变量,也可以作为函数的参数,返回值
高阶函数
数学概念 y = f(g(x))
在数学和计算机科学中,高阶函数应当是至少满足下面一个条件的函数

接受一个或多个函数作为参数
输出一个函数

def counter(base):
    def inc(step=1):
        nonlocal base
        base += step
        return base
    return inc

仿照sorted自定义sort函数

def sort(nums,*,key=None,reverse=False):
    newnums = []
    nums = [i for i in nums]
    print(nums)
    for i in nums:
        fx = x if key is None else (lambda x: key(x))(x)
        for z,x in enumerate(newnums):
            fi = i if key is None else (lambda i: key(i))(i)
            ibes = fi < fx if reverse else fi > fx
            if ibes:
               newnums.insert(z,i)
               break
        else:
            newnums.append(i)
    return newnums

内建高阶函数

排序sorted

  • 定义sorted(iterable,*,key=None,reverse=False) -> list
sorted(lst,key=lambda x: 6-x)
list.sort(key=lambda x: 6-x)

过滤filter

  • 定义filter(funtion,iterable)
  • 对可迭代对象进行遍历,返回一个迭代器
  • funtion参数是一个参数的函数,且返回值应当是bool类型,或其返回值等效布尔值
  • funtion参数如果是None,可迭代对象的每一个元素自身等效布尔值
list(filter(lambda x: x%3==0,[1, 9, 55, 150, -3, 78, 28, 123]))
list(filter(None, range(5)))
list(filter(None,range(-5, 5)))

映射map

  • 定义map(funtion,*iterables) -> map abject
  • 对多个可迭代对象的元素,按照指定的函数进行映射
  • 返回一个迭代器
list(map(lambda x: 2*x+1, range(10)))
dict(map(lambda x: (x%5, x), range(500)))
dict(map(lambda x,y: (x,y), 'abcde', range(10)))

柯里化

  • 指的是将原来接受两个参数的函数编程新的接受一个参数的函数的过程.新的函数返回一个以原有第二个参数为参数的函数
  • z = f(x,y)转换称 z = f(x)(y)的形式
    例如
def add(x,y)
    return x + y

#等价于
def add(x)
    def inner(y)
        return x + y
    return inner

通过嵌套函数就可以把函数转换成柯里化函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值