python基础学习-functools
functools模块
partial方法
- 偏函数,把函数部分的参数固定一下,相当于为部分的参数添加了一个固定的默认值,形成一个新的函数并返回
- 从partial生成的新函数,是对原函数的封装
partial方法举例
1 | import functools |
@functools.lru_cache(maxsize=128,typed=False)
- Least-recently-used带参装饰器。lru,最近最少使用。cache缓存
- maxsize表示最大长度,这个参数控制存多少个。如果maxsize设置为None,则禁用LRU功能,并且缓存可以无限制增长。当maxsize是二的幂时,LRU功能执行得最好
- 如果typed设置为True,则不同类型的函数参数将单独缓存。例如,f(3)和f(3.0)将被视为具有不同结果的不同调用
举例
1 | import functools |
- lru_cache装饰器
- 通过一个字典缓存被装饰函数的调用和返回值
- key是什么?分析代码看看
1 | functools._make_key((4,6),{'z':3},False) |
- lru_cache装饰器
- 斐波那契数列递归方法的改造
1 | import functools |
- lru_cache装饰器应用
- 使用前提
- 同样的函数参数一定得到同样的结果
- 函数执行时间很长,且要多次执行
- 本质是函数调用的参数 => 返回值
- 缺点
- 不支持缓存过期,key无法过期、失效
- 不支持清除操作
- 不支持分布式,是一个单机的缓存
- 适用场景,单机上需要空间换时间的地方,可以用缓存来将计算变成快速的查询
- 使用前提
装饰器应用练习
- 一、实现一个cache装饰器,实现可过期被清除的功能
- 简化设计,函数的形参定义不包含可变位置参数、可变关键词参数和keyword-only参数
- 可以不考虑缓存满了之后的换出问题
- 二、写一个命令分发器
- 程序员可以方便的注册函数到某一个命令,用户输入命令时,路由到注册的函数
- 用户输入用input(“>>>”)
- 实现名称与函数的对应关系
python基础学习-functools
https://python0.netlify.app/2019/11/27/python基础学习-functools/