除了缓存之外,lru_cache
decorator还向修饰后的函数-cache_info
和中添加了新功能cache_clear
。下面是一个简单的示例,应解释它们如何工作:
>>> @lru_cache(5)
... def foo():
... print('Executing foo...')
...
>>> foo()
Executing foo...
>>> foo()
>>> foo.cache_info()
CacheInfo(hits=1, misses=1, maxsize=5, currsize=1)
>>> foo.cache_clear()
>>> foo()
Executing foo...
回答您的问题:
如果我有条件地将cache_clear()调用放在正在缓存的函数中,它将执行吗?
如果结果尚未缓存,则该函数将执行,并且应根据您的条件执行该函数cache_clear
。不过,我不会使用这种解决方案- 一种好的做法是在缓存的对象外部进行无效化,否则在最坏的情况下根本没有失效的风险,在最佳情况下则看不到代码。
如何从其他函数运行cache_clear()?
from x import foo
def bar():
foo.cache_clear()