python方法的延遲加載


數據挖掘的過程中,數據進行處理是一重要的環節,我們往往會將其封裝成一個方法,而有的時候這一個方法可能會被反復調用,每一次都對數據進行處理這將是一個很耗時耗資源的操縱,那么有沒有辦法將計算后的結果緩存起來達到調用一次,處處運行的效果,經過一番研究在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,即只調用了一次,也就達到了我們的目的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM