【发布时间】:2016-03-16 01:57:30
【问题描述】:
我正在尝试实现一个可以记忆任意函数的装饰器。看来我已经使用以下代码成功地实现了这一点:
def memoize(func):
cache = {}
def wrapper(*args, **kwargs):
acc = ""
for arg in args:
acc += str(arg)
if acc in cache:
return cache[acc]
else:
cache[acc] = func(*args, **kwargs)
return cache[acc]
return wrapper
@memoize
def fib(n):
if n == 0 or n == 1:
return 1
else:
return fib(n - 1) + fib(n - 2)
然后fib(100) 很快返回573147844013817084101。但是,如果我不使用语法糖:
def fib(n):
if n == 0 or n == 1:
return 1
else:
return fib(n - 1) + fib(n - 2)
memoized = memoize(fib)
print memoized(100)
函数挂起。调试它,看起来返回的包装器无法修改缓存。有人可以解释这种行为吗?据我所知,使用糖和不使用糖之间应该没有区别。
【问题讨论】:
标签: python functional-programming decorator python-decorators memoization