【发布时间】:2012-01-22 10:44:12
【问题描述】:
我从 Peter Norvig 的网站获得了以下代码 sn-p;它是一个装饰器,可以在函数调用上启用记忆(缓存对函数的先前调用以将指数递归更改为简单的动态程序)。
def memo(f):
table = {}
def fmemo(*args):
if args not in table:
table[args] = f(*args)
return table[args]
fmemo.memo = table
return fmemo
代码运行良好,但我想知道为什么倒数第二行是必要的。这显然是我对 Python 知识的一个空白,但是删除该行并运行一个简单的斐波那契函数,它似乎仍然有效。这是否与同时记忆多个功能有关?为什么 fmemo 的成员变量会被称为 memo(假设这不是一个尴尬的巧合)?
谢谢!
【问题讨论】:
-
您的代码缩进看起来不正确。这是一个嵌套函数吗?
-
顺便说一句,这已在 Python 3.2 中实现为
functools.lru_cache。 -
@MAK:这是一个嵌套函数。这是装饰器的声明
-
@Bean:在我发表评论后,缩进已修复。 NVM。
-
我的错!一定是错误的复制/粘贴。
标签: python recursion decorator