在函数调用之间保存值

Save value between function calls

我写了一个简单的装饰器来缓存值,以防函数调用 return ''。有没有比我目前使用的字典更好的存储值的方法?使用 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

将结果存储为原始函数的属性似乎更符合 Python 风格:

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