我目前正在学习装饰器,这个例子应该是一个基本的装饰器,可以保存递归斐波那契函数的结果,但是我有几个问题。首先是“fn”,这只是变量的名称吗?或者它是python语言的一部分。'KeyError' 同样的问题。我也不明白为什么在函数体中,args 有时前面有一个 * 而其他时候没有(它不应该总是有一个 *)
def memoize(fn):
stored_results = {}
def memoized(*args):
try:
return stored_results[args]
except KeyError:
result = stored_results[args]=fn(*args)
return result
return memoized
def fibonacci(n):
if n == 0 or n == 1:
return n
else:
return (fibonacci(n-1)+fibonacci(n-2))
@memoize
fibonacci(5)