我想要一个可以使用的功能functools.lru_cache
,但不是默认情况下。我正在寻找一种使用函数参数的方法,该函数参数可用于禁用lru_cache
。目前,我有该函数的两个版本,其中一个版本带有lru_cache
和一个没有。然后我有另一个函数,它用一个参数包装它们,该参数可用于控制使用哪个函数
def _no_cache(foo):
print('_no_cache')
return 1
@lru_cache()
def _with_cache(foo):
print('_with_cache')
return 0
def cache(foo, use_cache=False):
if use_cache:
return _with_cache(foo)
return _no_cache(foo)
有没有更简单的方法来做到这一点?
您无法从装饰函数内部禁用缓存。但是,您可以通过直接访问该函数来稍微简化代码__wrapped__
属性。
来自文档 https://docs.python.org/3/library/functools.html#functools.lru_cache:
原始的底层函数可以通过__wrapped__
属性。这对于内省、绕过缓存很有用,
或者用不同的缓存重新包装函数。
Demo:
from functools import lru_cache
@lru_cache()
def f(arg):
print(f"called with {arg}")
return arg
def call(arg, use_cache=False):
if use_cache:
return f(arg)
return f.__wrapped__(arg)
call(1)
call(1, True)
call(2, True)
call(1, True)
Output:
called with 1
called with 1
called with 2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)