在函数调用之间保存值

时间:2017-07-10 18:02:15

标签: python python-2.7 python-decorators

我编写了一个简单的装饰器来缓存值,以防函数调用返回''。有没有比我目前使用的字典更好的存储价值的方法?使用hasattr会更加pythonic,如果是,如何实现?还有别的东西会更好吗?

def cache(func):
# Caching decorator
# if result is '', return saved value
# else save and return result

    saved = {1:''}
    @wraps(func)
    def newfunc(*args, **kwargs):
        result = func(*args, **kwargs)
        if result:
            saved[1] = result
            return result
        return saved[1]
    return newfunc

1 个答案:

答案 0 :(得分:2)

将结果存储为原始函数的属性似乎更加pythonic:

def cache(func):
    func._result = ''
    @wraps(func)
    def newfunc(*args, **kwargs):
        result = func(*args, **kwargs)
        if result:
            func._result = result            
        return func._result
    return newfunc