數據挖掘的過程中,數據進行處理是一重要的環節,我們往往會將其封裝成一個方法,而有的時候這一個方法可能會被反復調用,每一次都對數據進行處理這將是一個很耗時耗資源的操縱,那么有沒有辦法將計算后的結果緩存
起來達到調用一次,處處運行的效果,經過一番研究在lazy_object_proxy/utils.py
中發現了一段代碼,詳見lazy_object_proxy。
class cached_property(object):
def __init__(self, func):
self.func = func
def __get__(self, obj, cls):
if obj is None:
return self
value = obj.__dict__[self.func.__name__] = self.func(obj)
return value
那么之后該怎么使用呢?下面給出了一個簡單的例子:
class Test(object):
def __init__(self,value):
self.value = value;
@cached_property
def display(self):
#create expensive object
print "some complicated compute here"
return self.value
下面是結果
>> t = Test(1000)
>>t.display
some complicated compute here
1000
>>t.display
1000
從上面結果可以看出,只打印出了一次some complicated compute here
,即只調用了一次,也就達到了我們的目的。