李成石

导航

 

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...."

执行后,结果如下 

posted on 2018-05-19 21:22  李成石  阅读(194)  评论(0编辑  收藏  举报