【问题标题】:Save value between function calls在函数调用之间保存值
【发布时间】:2017-12-14 14:07:46
【问题描述】:

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

【问题讨论】:

  • 我不会称它为更 Pythonic,而只是将属性字典传入和传出你的函数?
  • @cᴏʟᴅsᴘᴇᴇᴅ 我不明白你的评论。请改写。
  • {'var1' : val1, 'var2 : val2 } 让你的函数接受这个,使用这个,然后返回这个。

标签: python python-2.7 python-decorators


【解决方案1】:

将结果存储为原始函数的属性似乎更 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

【讨论】:

  • 看起来确实像pythonic
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多