我在某些类上有一些计算成本很高的属性。只要可变/基础属性不改变,这些属性就不会改变。有没有办法存储昂贵的财产,并且只有在进行了更改时才重新计算?
问问题
70 次
1 回答
1
您可以在属性方法中测试其他变量并将它们用作缓存键的一部分:
class CachedProperties(object):
@property
def expensiveValue(self):
cacheKey = (self.var1, self.var2)
if cacheKey in self._expensiveValueCache:
return self._expensiveValueCache[cacheKey]
# No cached value available, calculate it now
res = self._expensiveValueCache[cacheKey] = calculation(self.var1, self.var2)
return res
现在您推迟计算,直到您真正需要昂贵的值并且var1 或 var2 已更改。
于 2012-07-03T12:23:40.533 回答