gpt4 book ai didi

python - 从函数内部禁用 `functools.lru_cache`

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:15 24 4
gpt4 key购买 nike

我想要一个可以使用 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__ 属性直接访问函数来稍微简化代码。

来自documentation :

The original underlying function is accessible through the __wrapped__ attribute. This is useful for introspection, for bypassing the cache, or for rewrapping the function with a different cache.

演示:

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)

输出:

called with 1
called with 1
called with 2

关于python - 从函数内部禁用 `functools.lru_cache`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56544334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com