1

我在某些类上有一些计算成本很高的属性。只要可变/基础属性不改变,这些属性就不会改变。有没有办法存储昂贵的财产,并且只有在进行了更改时才重新计算?

4

1 回答 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 回答