【问题标题】:Access variable value from decorator after decorated function executes装饰函数执行后从装饰器访问变量值
【发布时间】:2020-04-30 18:39:08
【问题描述】:

def memoize(fn):
    memory=dict()
    def inner(inpt):
        if not inpt in memory:
            memory[inpt] = fn(inpt)
        return memory[inpt]
    return inner

@memoize
def expected_rounds(picks_to_go):
    #algorithm....
    ans += expected_rounds(new_picks_to_go) #some recursion
    #algorithm....
    return ans

在函数成功结束执行并返回答案后,如何在memoize装饰器中访问(甚至打印)变量memory

【问题讨论】:

  • 鉴于您目前的实现方式,它仅在 closure 中。如果你设置例如inner._memory = memoryreturn inner 之前,您可以访问expected_rounds._memory

标签: python python-3.x python-decorators


【解决方案1】:

我在发布问题后创建的想法是使用类,但我想继续使用函数装饰器:

#class callable that can be used as decorator
class Memoize:
    def __init__(self):
        self.memory = {}
#         self.fn = None

    def set_fn(self, fn):
        self.fn = fn
        return self # this line is important

    def __call__(self, *args):
        if args not in self.memo:
            self.memory[args] = self.fn(*args)
        return self.memory[args]

memo1 = Memoize()

@memo1.set_fn
def expected_rounds(picks_to_go):
    #something
    return ans

expected_rounds(some_input)

memo1.memory # <- access to memory possible

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2011-06-25
    • 2011-09-22
    • 2016-11-24
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多