在python中缓存函数的最后k个结果
发布时间:2020-12-20 11:08:39 所属栏目:Python 来源:网络整理
导读:我想编写一个接受单参数函数f和整数k的函数,并返回一个与f相同的函数,除非它缓存f的最后k个结果. 例如,如果memoize是我们追求的函数,让mem_f = memoize(f,2),那么: mem_f(arg1) - f(arg1) is computed and cached mem_f(arg1) - f(arg1) is returned from c
我想编写一个接受单参数函数f和整数k的函数,并返回一个与f相同的函数,除非它缓存f的最后k个结果.
例如,如果memoize是我们追求的函数,让mem_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个结果?我是新手,任何帮助将不胜感激. 解决方法
您可以使用
functools.lru_cache 来执行缓存.我接受一个maxsize参数来控制它缓存的程度:
from functools import lru_cache @lru_cache(maxsize=2) def test(n): print("calling function") return n * 2 print(test(2)) print(test(2)) print(test(3)) print(test(3)) print(test(4)) print(test(4)) print(test(2)) 结果:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |