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)
  • 相关阅读:
    140704
    140703
    140702
    堆排序
    并查集
    140701
    这年暑假集训-140630
    vim for python
    hihocode 第九十二周 数论一·Miller-Rabin质数测试
    hdu 3157 Crazy Circuits 有源汇和下界的最小费用流
  • 原文地址:https://www.cnblogs.com/jzm17173/p/6557810.html
Copyright © 2011-2022 走看看