- 论坛徽章:
- 1
|
邪门,本人写了一个缓存的装饰类,为了方便使用,实现的是可以当做类装饰器使用,可以实例化类之后,使用这个实例的一个方法做装饰器,还可以直接把这个实例当做一个缓存直接在代码种get,set.
但是发现一个问题,就是这个set_key参数,本来是一个可选参数,如果设置了这个参数,就用这个参数当做缓存的key,如果没有设置,就自己合成一个key,代码如下:
- def decorate(self, set_key=None, *set_args, **set_kwargs):
- def wrap(func):
- def wrapped_func(*func_args, **func_kwargs):
- if set_key is None:
- set_key = CacheDecorator.make_key(self.domain, func.__name__, *func_args, **func_kwargs)
- value = self.cache.get(set_key)
- if value is None:
- value = func(*func_args, **func_kwargs)
- self.cache.set(set_key, value, *set_args, **set_kwargs)
- return value
- return wrapped_func
- return wrap
复制代码 就是简单的
if set_key is None:
这一样,竟然提示错误:
set_key = set_key
UnboundLocalError: local variable 'set_key' referenced before assignment
如果说这行错误的话,那
value = func(*func_args, **func_kwargs)
self.cache.set(set_key, value, *set_args, **set_kwargs)
这两行也使用了形参,怎么就没提示出错呢? |
|