2012-07-03 3 views

답변

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 

지금 당신이 계산을 연기 변경되었습니다.

+0

캐시에서도 제거해야합니다. – Deestan

+0

@Deestan : 코드를 상당히 복잡하게 만들고이 대답의 범위를 벗어납니다. 프로그램의 수명 동안 var1과 var2가 많이 변경되고 * expensiveValue가 많이 검색되는 경우에만 필요합니다. –

+0

재 계산을하기 전에'self._expensiveValueCache = {}'를 쓰면 아무 것도없는 것보다 훨씬 낫습니다. – Deestan

관련 문제