- 論壇徽章:
- 1
|
邪門,本人寫了一個(gè)緩存的裝飾類,為了方便使用,實(shí)現(xiàn)的是可以當(dāng)做類裝飾器使用,可以實(shí)例化類之后,使用這個(gè)實(shí)例的一個(gè)方法做裝飾器,還可以直接把這個(gè)實(shí)例當(dāng)做一個(gè)緩存直接在代碼種get,set.
但是發(fā)現(xiàn)一個(gè)問(wèn)題,就是這個(gè)set_key參數(shù),本來(lái)是一個(gè)可選參數(shù),如果設(shè)置了這個(gè)參數(shù),就用這個(gè)參數(shù)當(dāng)做緩存的key,如果沒(méi)有設(shè)置,就自己合成一個(gè)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
復(fù)制代碼 就是簡(jiǎn)單的
if set_key is None:
這一樣,竟然提示錯(cuò)誤:
set_key = set_key
UnboundLocalError: local variable 'set_key' referenced before assignment
如果說(shuō)這行錯(cuò)誤的話,那
value = func(*func_args, **func_kwargs)
self.cache.set(set_key, value, *set_args, **set_kwargs)
這兩行也使用了形參,怎么就沒(méi)提示出錯(cuò)呢? |
|