zoukankan      html  css  js  c++  java
  • memoization

    memoization 是指通过缓存函数返回结果来加速函数调用的一种技术。仅当函数是纯函数 时结果才可以被缓存,也就是说,函数不能有任何副作用或输出,也不能依赖任何全局状态

    import math
    
    _SIN_MEMOIZED_VALUES = {}
    def memoized_sin(x):
        if x not in _SIN_MEMOIZED_VALUES:
            _SIN_MEMOIZED_VALUES[x] = math.sin(x)
        return _SIN_MEMOIZED_VALUES[x]
    
    memoized_sin(1)
    memoized_sin(2)
    memoized_sin(2)
    _SIN_MEMOIZED_VALUES
    # {1: 0.8414709848078965, 2: 0.9092974268256817}

    LRU

    functools 模块提供了一个LRU(Least-Recently-Used)缓存装饰器。限定了缓存的条目数,当缓存的条目数达到最大时会移除最近最少使用的条目

    import functools
    import math
    
    @functools.lru_cache(maxsize=2)
    def memoized_sin(x):
        return math.sin(x)
    
    memoized_sin(2)
    memoized_sin.cache_info()
    memoized_sin(2)
    memoized_sin.cache_info()
    memoized_sin(3)
    memoized_sin.cache_info()
    memoized_sin(4)
    memoized_sin.cache_info()
    memoized_sin.cache_clear()
    memoized_sin.cache_info()
    # CacheInfo(hits=0, misses=0, maxsize=2, currsize=0)
  • 相关阅读:
    kingbase8d常见问题
    kibana-7.9.1安装
    ElasticSearch-7.9.1
    在线分析-jstack
    Wireshark常用过滤条件
    shiro登录认证过程
    查看mysql库中所有表的大小和记录数
    linux设置定时任务crontab
    POI 使用常见问题
    Java源码之String-构造方法
  • 原文地址:https://www.cnblogs.com/jzm17173/p/6557810.html
Copyright © 2011-2022 走看看