假设我使用缓存装饰器来定义一个新函数,如下所示:
def cached(funcy):
cache = dict()
def cache_funcy(x):
if x in cache:
return cache[x]
else:
print cache
result = funcy(x)
cache[x] = result
return result
return cache_funcy
@cached
def triple(x):
return 3*x
调用该函数triple四次会产生以下输出:
>>> triple(1)
{}
3
>>> triple(2)
{1: 3}
6
>>> triple(2)
6
>>> triple(4)
{1: 3, 2: 6}
12
我的理解是该函数triple可以访问本地调用的字典,cache因为该字典存在于triple定义的名称空间中。该字典在外部全局范围内不能直接访问。
是否可以cache通过函数的某种属性访问该字典triple?
注意:我想知道是否可以在不显式创建cache属性的情况下执行此操作,triple例如cache_funcy.cache = cache在cached.
catspeake
相关分类