如何解决如何使用@ functools.lru_cache装饰器绕过函数
希望你一切都好!
我正在使用一个利用functools库的lru_cache的函数。例如:
@functools.lru_cache(maxsize=pow(2,13))
def get_id(word):
# retrieving id,using cache if possible
我想在某些情况下绕过缓存,从而直接从源头获取ID, 但我不想创建运行完全相同的代码的2个单独的函数(一个带有缓存,另一个没有)。 在docs.python上阅读functools的文档,我了解可以绕过缓存:
我尝试使用包装器函数执行此操作,但是由于内部函数仅在外部函数运行时才存在,因此每次调用都会重置缓存。
在此问题上的任何帮助,我将不胜感激。
解决方法
文档告诉您的是,您可以通过这种方式(绕过缓存)直接访问包装的函数:
get_id.__wrapped__(word="hello")
您可以添加一个带有标志的附加层:
from functools import lru_cache
@lru_cache(maxsize=pow(2,13))
def get_cached(word):
return get_raw(word)
def get_raw(word):
# your logic goes here...
pass
def get_id(word,cached=True):
if cached:
return get_cached(word)
else:
return get_raw(word)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。