高阶函数
函数作为返回值 或者 函数作为参数 这类函数就是高阶函数。上节博文有说过闭包,递归都是属于高阶函数。
函数作为返回值:通常用作闭包的场景,需要封装一些变量,后面的面向对象会有类来封装,通常用返回作为返回值很少
函数作为参数:通常用于大多数逻辑固定,少部分逻辑不固定的场景
通常 函数作为参数 用的比 函数作为返回值 多,函数返回值封装通常用面向对象来使用
标准库中函数作为参数用的很多。
python中函数式一等对象(first class),函数也是一种对象,并且和普通对象一样赋值,作为参数作为返回值
1 | #实例: |
内置函数
匿名函数
1 | def fn(x): |
其他内置函数
map
1 | help(map) |
filter
1 | help(filter) |
reduce
在python3中,reduce函数从全局空间中移除,防止在了functools模块中,需要引入
reduce就是把一个函数 用在一个列表序列上,这个函数必须接受两个参数,reduce把结果继续和下一个序列的下一个元素累计运算
1 | from tunctools import reduce |
装饰器
顾名思义就知道是一种装饰作用,装饰有很多种,比如计算函数时长,在函数结果前或者结果后做一些装饰。
装饰器其实只是高阶函数的一种,分为不带参数的装饰器,带参数的装饰器。
高阶函数:函数作为返回值 或者 函数作为参数 这类叫高阶函数
装饰器:函数即作为返回值 又 作为参数,这叫装饰器(装饰器的参数必须是函数,返回值必须也是函数)
1 | #例子 |
总结
装饰器本质就是一个函数,接受一个函数作为参数,并返回一个函数
装饰器通常会返回一个封装函数,这个封装在传入的函数前后作一些事情
装饰器本身肯定必须是高阶函数
装饰器所装饰的函数就是装饰器所接受的参数
函数属性如何保留
1 | #看个简单实例: |
装饰器实例
实现cache
1 | from functools import wraps |
监控
1 | def mertic(prefix,instance):#prefix是发送的前缀,instance发送监控信息 |
身份验证
1 | def auto_func(func): |
获取最大值
1 | #模拟数据源不断产生数字,求一段时间内,最大的元素 |