微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用@ functools.lru_cache装饰器绕过函数

如何解决如何使用@ 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 举报,一经查实,本站将立刻删除。