我想写一个函数,它接受一个单参数函数f和一个整数k,并返回一个与f行为相同的函数,只是它缓存f的最后k个结果
例如,如果memoize是我们要找的函数,让mem\u f=memoize(f,2),那么:
mem_f(arg1) -> f(arg1) is computed and cached
mem_f(arg1) -> f(arg1) is returned from cache
mem_f(arg2) -> f(arg2) is computed and cached
mem_f(arg3) -> f(arg3) is computed and cached, and f(arg1) is evicted
我所做的是:
def memoize(f,k):
cache = dict()
def mem_f(*args):
if args in cache:
return cache[args]
result = f(*args)
cache[args]= result
return result
return mem_f
此函数返回缓存中的结果,如果不在缓存中,则计算并缓存该结果。但是,我不清楚如何只缓存f的最后k个结果?我是新手,任何帮助都将不胜感激。你知道吗
扩展Mark Meyer的优秀建议,下面是使用
lru_cache
和问题术语的解决方案:结果:
解决方案
您可以通过如下方式使用
OrderedDict
修复现有代码:测试一下
输出:
这个版本的
memoize
很可能适合您自己的代码。但是,对于生产代码(即其他人必须依赖的代码),您可能应该使用Mark Meyer建议的标准库函数(functools.lru_cache
)。你知道吗您可以使用^{} 来进行缓存。我接受
maxsize
参数来控制它的缓存量:结果:
相关问题 更多 >
编程相关推荐