1
몇 가지 클래스에서 계산 상 많은 비용이 드는 속성이 있습니다. 이러한 속성은 변경 가능/기본 특성이 변경되지 않는 한 변경되지 않습니다. 값 비싼 자산을 저장하는 방법이 있습니까? 변경이 이루어진 경우에만 다시 계산하십시오.변경 가능한 개체의 변경 사항을 모니터링하는 방법은 무엇입니까?
몇 가지 클래스에서 계산 상 많은 비용이 드는 속성이 있습니다. 이러한 속성은 변경 가능/기본 특성이 변경되지 않는 한 변경되지 않습니다. 값 비싼 자산을 저장하는 방법이 있습니까? 변경이 이루어진 경우에만 다시 계산하십시오.변경 가능한 개체의 변경 사항을 모니터링하는 방법은 무엇입니까?
: 당신이 실제로 및 VAR1 또는 VAR2이 가지고있는 비싼 값을 필요로 할 때까지
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
지금 당신이 계산을 연기 변경되었습니다.
캐시에서도 제거해야합니다. – Deestan
@Deestan : 코드를 상당히 복잡하게 만들고이 대답의 범위를 벗어납니다. 프로그램의 수명 동안 var1과 var2가 많이 변경되고 * expensiveValue가 많이 검색되는 경우에만 필요합니다. –
재 계산을하기 전에'self._expensiveValueCache = {}'를 쓰면 아무 것도없는 것보다 훨씬 낫습니다. – Deestan