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)
原文地址:https://www.cnblogs.com/jzm17173/p/6557810.html