zoukankan      html  css  js  c++  java
  • 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无法过期、失效

    不支持清除操作

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

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

  • 相关阅读:
    poj 2187 Beauty Contest (凸包)
    poj 1584 A Round Peg in a Ground Hole(计算几何)
    poj 1039 Pipe (计算几何)
    struts2开篇
    Action的内容
    输入校验
    文件上传
    Struts.xml内容
    .NET资源推荐:数据持久层
    线程间操作无效: 从不是创建控件“...”的线程访问它。
  • 原文地址:https://www.cnblogs.com/rprp789/p/9556554.html
Copyright © 2011-2022 走看看