首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按函数名和args使用klepto缓存

按函数名和args使用klepto缓存
EN

Stack Overflow用户
提问于 2016-01-05 10:18:36
回答 1查看 182关注 0票数 0

我正在尝试使用klepto作为缓存,从arg和函数名中散列,这有可能吗?

例如,使用dir_cache,我就可以

代码语言:javascript
复制
@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中的单独键。

我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-05 23:05:43

虽然这可能不是一个完全可靠的解决方案,但在某种程度上似乎可以实现您想要的效果。

代码语言:javascript
复制
>>> 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'关键字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34609218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档