请帮助我理解Python中的decorators(Fibonnacci+memoization)

2024-05-11 10:03:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解以下代码(来自此网站:http://jeremykun.com/2012/01/12/a-spoonful-of-python/):

def memoize(f):
    cache = {}

    def memoizedFunction(*args):
        if args not in cache:
            cache[args] = f(*args)
        return cache[args]

    memoizedFunction.cache = cache  
    return memoizedFunction 

@memoize
def fib(n):
    if n <= 2:
          return 1
    else:
          return fib(n-1) + fib(n-2)

我理解拥有缓存的好处,特别是对于计算斐波那契数之类的东西。我也明白现在我调用fib(4)时,它相当于调用myfun(4),其中myfun=memoize(fib)。你知道吗

我不明白的是,为什么每次调用fib时缓存都不重新分配给{}。你知道吗

有人能解释一下吗?你知道吗

谢谢!你知道吗


Tags: 代码comhttpcachereturnif网站def
1条回答
网友
1楼 · 发布于 2024-05-11 10:03:27

当定义了fib时,装饰器memoize只被调用一次。cache存储在闭包中(表示memoize的局部变量),每个对fib的调用都可以访问该闭包。每次对fib的后续调用都会导致对memoizedFunction的调用,而不是对memoize的调用,而且由于fibmemoizedFunction都不会重置缓存,因此它永远不会被重置。你知道吗

相关问题 更多 >