chapter5.1高阶函数

Posted rprp789

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了chapter5.1高阶函数相关的知识,希望对你有一定的参考价值。

高阶函数

  函数在Python中是一等公民

  函数也是对象,可调用对象

  函数可以做为普通变量、参数、返回值等

数学概念y = g(f(x))

在数学和计算机科学中,高阶函数要满足至少一个以下的条件

  接收一个或多个函数

  输出一个函数,最多一个,不能多

 

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

比较两个函数,比不了大小,就比地址,

== 判断内容是否相同,没有比地址,is判断地址是否相同

def sort(iterable,reverse=False):
    a = [] 
    for x in iterable:
        for i,y in enumerate(a):
            flag = x>y if reverse else x<y
            if flag:
                a.insert(i, x)
                break
        else:
            a.append(x)
    
    return a
sort([1,2])

插入实现用一个参数控制

def sort(iterable,reverse=False,key=lambda a,b: a>b):
    a = [] 
    for x in iterable:
        for i,y in enumerate(a):
            flag = key(x,y) if reverse else not key(x,y)
            if flag:
                a.insert(i, x)
                break
        else:
            a.append(x)
    
    return a
sort([1,2])

参数用函数,是高阶函数,忽略算法效率问题

enumerte

str.lower(‘A‘)  调用类方法,理解为函数,操作对象为’A‘

‘A‘.lower()  ’A‘对象对自己调用方法把自己转化   对象.操作

 

内建函数,高阶函数

sorted(iterable, /, *, key=None, reverse=False)

  sorted 中 key只是比较方式,不会影响原数据,reverse表示是否反转排序

sorted(range(5),key=lambda x: 6-x)
output : [4, 3, 2, 1, 0]

  立即返回新列表

filter(function,iterable)   过滤可迭代对象的元素,返回一个迭代器

function 一个一个的计算,操作具有一个参数的函数,返回bool,      返回True时的实参

list(filter(lambda x:x-1, range(5)))
output : [0, 2, 3, 4]

x-1,当x = 1 时,得0,等效False,过滤掉1

 

map(func, *iterables)  对多个可迭代对象的元素按照指定的函数进行映射,返回一个迭代器

传入传出个数不变

list(map(lambda x:2*x+1 ,range(5)))
output : [1, 3, 5, 7, 9]

map函数返回一个迭代器,要用容器接收

dict(map(lambda x:(x%5,x), range(400)))
output : {0: 395, 1: 396, 2: 397, 3: 398, 4: 399}

注意字典集合去重的问题

 

函数返回值一定为1个

构造对象,解析式 都可以封装或者创建容器

柯里化 currying

指的是将原来接收两个参数的函数变成新的接收一个参数的函数的过程。新函数返回一个以原有第二个参数为参数的函数

z = f(x, y) 转换为z = f(x)(y)

通过嵌套函数可以把函数转化成柯里化函数
函数块右移,参数下拉,新建函数,再调用原函数

 

def add(x,y):
    return x+y
add(4,5)
def add(x): def fn(y): return x+y return fn add(4)(5)

 




以上是关于chapter5.1高阶函数的主要内容,如果未能解决你的问题,请参考以下文章

js数组高阶方法reduce经典用法代码分享

Python高阶函数

浅谈JS高阶函数

Python3 高阶函数

python之高阶函数

python中的高阶函数