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

    不支持清除操作

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

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

  • 相关阅读:
    u-boot下延时程序失效的bug调试
    tiny4412u-boot烧写及根文件系统制作(不进入终端问题)
    tiny4412学习笔记-将uboot、zImage、文件系统烧到emmc中 (转)
    Tiny4412 U-BOOT移植(转)
    为何ARM linux会引入Device Tree(转)
    嵌入式开发社区
    基于tiny4412的u-boot移植(二)(转)
    ARM Linux 3.x的设备树(Device Tree)(转)
    HTML基础-------HTML标签(1)
    HTML基础-------最初概念以及相关语法
  • 原文地址:https://www.cnblogs.com/rprp789/p/9556554.html
Copyright © 2011-2022 走看看