在被装饰的函数执行后,从装饰者中访问变量值。

问题描述 投票:0回答:1

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

如何访问(甚至打印)变量 memorymemoize 函数后的装饰符将成功结束执行并返回答案?

python python-3.x python-decorators
1个回答
0
投票

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

#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

© www.soinside.com 2019 - 2024. All rights reserved.