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无法过期、失效

不支持清除操作

不支持分布式,是一个单机缓存

单机上需要空间换时间是,可以使用,将计算变为快速查询

猜你喜欢

转载自www.cnblogs.com/rprp789/p/9556554.html