簡體   English   中英

如何在python中記住函數結果?

[英]how to memoize a function result in python?

我想記住一個類中函數的結果:

class memoize:
    def __init__(self, function):
        self.function = function
        self.memoized = {}

    def __call__(self, *args):
        try:
            return self.memoized[args]
        except KeyError, e:
            self.memoized[args] = self.function(*args)
            return self.memoized[args]

class DataExportHandler(Object):
    ...

    @memoize
    def get_province_id(self, location):
        return search_util.search_loc(location)[:2] + '00000000'

    def write_sch_score(self):
        ...
        province_id = self.get_province_id(location)

但這不起作用,因為它告訴我get_province_id takes exactly 2 arguments(1 given)

有Memoizing裝飾的幾個例子在這里是值得考慮看看。 我認為第二個和第三個示例可能更好地解決了方法與函數的問題。

成員函數不能使用類裝飾器,應該使用函數裝飾器:

def memoize1(obj):
    cache = obj.cache = {}

    @functools.wraps(obj)
    def memoizer(*args, **kwargs):
        key = str(args) + str(kwargs)
        if key not in cache:
            print 'not in cache'
            cache[key] = obj(*args, **kwargs)
        else:
            print 'in cache'
        return cache[key]
    return memoizer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM