我有一个像这样装饰的功能:
@do_something(cache_key=CACHE_ID ,timeout=CACHE_ID_TIMEOUT)
def get_something_from_cache():
...
...
...
return result
我的装饰者:
def do_something(function=None, cache_key='', timeout=300):
def decorator(func):
@wraps(func, assigned=available_attrs(func))
def inner(*args, **kwargs):
...
...
...
return decorator if function is None else decorator(function)
我希望能够拥有不同的' cache_key'取决于装饰函数输入。类似的东西:
@do_something(cache_key=CACHE_ID.format(att) ,timeout=CACHE_ID_TIMEOUT)
def get_something_from_cache(att):
...
...
...
return result
有可能??
答案 0 :(得分:2)
不。
函数装饰器在定义装饰函数后执行。在调用函数之前,att
不存在,可能在定义之后很长时间,或者根本不存在。