gpt4 book ai didi

python - python装饰器如何与递归一起工作?

转载 作者:太空宇宙 更新时间:2023-11-04 08:52:12 24 4
gpt4 key购买 nike

我有下面的代码

def memo(fn):
cache = {}
miss = object()
print 'MEMO'
def wrapper(*args):
result = cache.get(args, miss)
print 'IT CALLS'
if result is miss:
print 'IT MISSES'
result = fn(*args)
cache[args] = result
return result
return wrapper

@memo
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)

当我调用 fib(4) 时,它只打印一次 MEMO。以下是输出。

MEMO
IT CALLS
IT MISSES
IT CALLS
IT MISSES
IT CALLS
IT MISSES
IT CALLS
IT MISSES
IT CALLS
IT MISSES
IT CALLS
IT CALLS

是什么导致了这种行为??

最佳答案

这是正确的行为,与递归无关。

MEMO 在装饰器被调用时打印,当它应用于函数时;即,在定义时。如果您根本不调用 fib(),MEMO 仍会被打印出来。

关于python - python装饰器如何与递归一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34041715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com