我对如何正确应用@lru_cache
装饰器有一个问题。我有一个字典attribute
,它通过在值列表上调用另一个函数来计算值。我想缓存所有访问attribute
的权限。是否有任何方法来声明lru_cache无效每当有写到some_list
?到目前为止,代码如下:
@property
@lru_cache(maxsize=None)
def attribute(self):
attribute = {}
for k in self.some_dict:
attribute[k] = self.complex_computation(self.some_list)
return attribute
最好将@lru_cache
用于self.complex_computation
方法。
@lru_cache
savesfunction_calls,基本上就是function + args + return_value。所以在return
值和args之间一定有依赖关系,但是property
没有这种依赖关系——你在这里总是传递相同的self
。
但是self.complex_computation
有这样一个参数,它确实更适合@lru_cache
装饰器。但请记住- @lru_cache不能用于List参数。