首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图实现,只停留在几个地方

问试图实现,只停留在几个地方
EN

Stack Overflow用户
提问于 2013-10-19 05:18:40
回答 1查看 299关注 0票数 0

我目前正在学习装饰器,这个示例应该是保存递归fibonacci函数结果的基本装饰器,但是我有几个问题。首先,"fn",这仅仅是变量的名称吗?或者它是python语言的一部分。同样的问题是“KeyError”。我也不明白为什么在函数的主体中,args有时在前面有一个*,而另一些时候没有(不应该总是有一个*)

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-19 05:21:22

  1. 缩进正确。 def回忆录(Fn):stored_results = {} def回传(*args):尝试:除了KeyError: KeyError: stored_resultsargs=fn(*args)返回结果返回回传#^
  2. @memoize应该在def ...行之前。 @回忆录#<-应该在这里:如果n为== 0或n == 1:返回n:返回(fibonacci(n-1)+fibonacci(n-2))
  3. 只需调用fibonacci而不带@memoize fibonacci(5)

首先,"fn",这仅仅是变量的名称吗?

函数对象。这里,它是fibonacci函数。

“KeyError”同样的问题

如果这个论点之前没有回忆录,stored_results[args]就会引发KeyError。(如果您传递不可引用的值作为参数,则为TypeError)。

我也不明白为什么在函数的主体中,args有时在前面有一个*

使memoize装饰器使用另一个可以接受多个参数的函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19462657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档