from functools import wraps
from inspect import unwrap
def bypass_cache_last_time(func):
@wraps(func)
def function_wrapper(*args, **kwargs):
if not 'time' in kwargs or kwargs['time'] == 'last':
# Bypass any additional decorators and call function directly
return unwrap(func)(*args, **kwargs)
else:
return func(*args, **kwargs)
return function_wrapper
def my_lru_cache(func):
cached = lru_cache()(func)
@wraps(func)
def function_wrapper(*args, **kwargs):
if not 'time' in kwargs or kwargs['time'] == 'last':
# call the function directly
return func(*args, **kwargs)
else:
# use the lru_cache-wrapped version
return cached(*args, **kwargs)
return function_wrapper
将函数包装在} function 来剥离任意数量的装饰器的函数:
lru_cache()
中,然后在顶部添加修饰符并通过__wrapped__
属性访问原始的未缓存函数,或者更好的方法是使用^{把这个当作
^{pr2}$当
functools.wraps()
装饰器设置包装器上的__wrapped__
属性时,functools.wraps()
再次向前传递展开装饰器的能力。在或者让您的decorator应用
lru_cache()
修饰符本身,并在装饰时保留原始函数的副本:将此用作
您可以直接调用}的“包装”版本。然后您可以从包装中返回:
lru_cache()
来使用lru_cache(<args>)(func)
获得{相关问题 更多 >
编程相关推荐