chapter5.4Python之functools
functools模块
functools.
reduce
(function, iterable[, initializer])
在其说明文档中,有以下的代码理解这一过程
def reduce(function, iterable, initializer=None): it = iter(iterable) if initializer is None: value = next(it) else: value = initializer for element in it: value = function(value, element) return value
reduce减少,消减
可迭代对象不能为空,初始值未提供就在可迭代对象中取一个元素
partial 方法
偏函数,把函数部分的参数固定下来,相当于为部分的参数添加一个固定的默认值,形成一个新的函数并返回
从partial 生成新的函数,对原函数的封装,官方文档给的理解方式:
import functools def partial(func,*args,**keywords): def newfunc(*fargs,**fkeywords): newkeywords = keywords.copy() newkeywords.update(fkeywords) return func(*(args+fargs),**newkeywords) newfunc.func = func newfunc.args = args newfunc.keywords = keywords return newfunc
functools.lru_cache(maxsize=128, typed=False)
Least-recently-used装饰器,lru最近最少使用,cache缓存
若设置maxsize设置为None,则禁用lru功能,缓存可以无限增长,maxsize是二次幂时,lru功能执行最好
如果typed设置为True,则不同类型函数单独缓存,
lru_cache装饰器
通过一个字典缓存被装饰函数的调用和返回值
注意和缓冲区分,缓冲是一个类似队列的模型
lru_cache装饰器应用
使用前提
同样的函数参数一定得到同样的结果
函数执行时间很长,且要多次执行
本质是函数调用参数=>返回值
缺点
不支持缓存过期,key无法过期、失效
不支持清除操作
不支持分布式,是一个单机缓存
单机上需要空间换时间是,可以使用,将计算变为快速查询