以下函数用作存储已计算值结果的装饰器。 (错误),其cache
不必是函数对象的属性,我意识到在装饰函数的多个调用中,数据如何保持持久性?
def cached(f):
f.cache = {}
def _cachedf(*args):
if args not in f.cache:
f.cache[args] = f(*args)
return f.cache[args]
return _cachedf
:如果参数之前已经计算出,该函数将返回存储在cache
字典中的价值。作为事实的问题,下面的代码工作,以及:
def cached(f):
cache = {} # <---- not an attribute this time!
def _cachedf(*args):
if args not in cache:
cache[args] = f(*args)
return cache[args]
return _cachedf
我有一个很难理解怎么能cache
对象是跨多个调用持久。我尝试多次调用多个缓存函数,但无法找到任何冲突或问题。
任何人都可以请帮我理解cache
变量在_cachedf
函数返回后仍然存在吗?
非常感谢您的解释,您的编辑使事情变得非常清楚。我想知道,为了学习(C)Python的内部机制,是否可以通过检查或类似的方式访问您在最后一段中提到的“单元格”? – rahmu 2012-08-06 15:27:58
@rahmu:我解释了一个错误(不会变化太大)。不幸的是,这些单元对于Python代码来说是完全透明的,并且总是被它们引用的对象替换,所以它们不能被检查。 – 2012-08-06 16:13:08