我目前正在学习装饰器,这个示例应该是保存递归fibonacci函数结果的基本装饰器,但是我有几个问题。首先,"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)发布于 2013-10-19 05:21:22
@memoize应该在def ...行之前。
@回忆录#<-应该在这里:如果n为== 0或n == 1:返回n:返回(fibonacci(n-1)+fibonacci(n-2))fibonacci而不带@memoize
fibonacci(5)首先,"fn",这仅仅是变量的名称吗?
函数对象。这里,它是fibonacci函数。
“KeyError”同样的问题
如果这个论点之前没有回忆录,stored_results[args]就会引发KeyError。(如果您传递不可引用的值作为参数,则为TypeError)。
我也不明白为什么在函数的主体中,args有时在前面有一个*
使memoize装饰器使用另一个可以接受多个参数的函数。
https://stackoverflow.com/questions/19462657
复制相似问题