python装饰器对方法进行修饰,从而改变原有方法的行为,添加额外的逻辑。JAVA中可以类比于SpringMVC的AOP,对Controller中添加额外逻辑。
无参装饰
python装饰器使用两层方法嵌套,返回内层方法,中间调用被装饰的方法。
from functools import wraps import time def caesar(func): @wraps(func) def wrappers(*args, **kwargs): t0 = time.time() ret = func(*args, **kwargs) t = time.time() - t0 print str(t) return ret return wrappers @caesar def example(): print "caesar come here...."
执行结果,如下:
有参装饰
如果再添加参数,就需要再嵌套一层函数,比如加一个参数来进行方法执行次数。
from functools import wraps import time def retry_run(times=None): def inner_func(func): @wraps(func) def wrappers(*args, **kwargs): t0 = time.time() if times: for i in range(times): ret = func(*args, **kwargs) else: ret = func(*args, **kwargs) t = time.time() - t0 print str(t) return ret return wrappers return inner_func @retry_run(times=3) def example(): print "caesar come here...."
执行后,结果如下