使用klepto按函数名和args进行缓存

时间:2016-01-05 10:18:37

标签: python klepto

我正在尝试使用klepto作为缓存args和函数名称的缓存,这可能吗?

e.g。所以使用dir_cache我可以

@inf_cache(cache=dir_archive(cached=False))
def func1(x, y):
    return x + y

@inf_cache(cache=dir_archive(cached=False))
def func2(x, y):
    return x - y

并且对func1(1,2)和func2(1,2)的调用都会导致dir_archive中的单独键

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

尽管可能不是一个完全强大的解决方案,但这似乎可以在某种程度上做你想要的。

>>> import klepto 
>>> @klepto.inf_cache(cache=klepto.archives.dir_archive(cached=False))
... def func1(x, y, name='func1'):
...   return x+y
... 
>>> @klepto.inf_cache(cache=klepto.archives.dir_archive(cached=False))
... def func2(x, y, name='func2'):
...   return x-y
... 
>>> 
>>> func1(1,2)
3
>>> func1(1,3)
4
>>> func2(2,4)
-2
>>> func2(1,2)
-1
>>> func1.__cache__()
dir_archive('memo', {-8532897055064740991: 4, -8532897055063328358: 3, -960590732667544693: -1, -3289964007849195004: -2}, cached=False)
>>> 
>>> func1(1,2)        
3
>>> func1(1,2)
3
>>> func2(1,2)
-1
>>> 
>>> func1.__cache__() == func2.__cache__()
True

您会注意到dir_archive是相同的,并且这些功能似乎都使用单独的缓存。一个问题是,您可以传入'name'来覆盖默认值,并轻松搞砸。我猜你可以做一些更强大的东西,如果需要另一个装饰器,以防止用户更改'name'关键字。