python-3.x - 如何使用 @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 的文档,我了解到可以绕过缓存:
原始底层函数可以通过Wrapped 属性访问。这对于自省、绕过缓存或使用不同的缓存重新包装函数很有用。
我尝试使用包装函数这样做,但由于内部函数仅在外部函数运行时存在,因此每次调用时都会重置缓存。
我将不胜感激有关此事的任何帮助。
解决方案
文档告诉您的是,您可以通过这种方式直接访问包装函数(绕过缓存):
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)
推荐阅读
- php - 如何使用确切数量的参数查找函数调用
- c++ - 什么会在这个程序中产生内存泄漏
- xamarin.forms - 将 AutoMapper 从 7.0.0 升级到 9.0.0 后面临映射异常
- api - Microsoft Graph 活动 - 401 AAD 身份验证失败
- kotlin - 如何抑制 Detekt 的 WildcardImport 和 MatchingDeclarationName?
- html - 位置绝对但相对
- php - 每周一自动在 WooCommerce 中将订单状态从处理中更新为已完成
- python - 3+5 < 100 的倍数之和
- jquery - Firefox
在剑道编辑器用户输入的末尾添加标签 - types - 如何在 coq 中定义自定义归纳原则?