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...."
执行后,结果如下

浙公网安备 33010602011771号