zoukankan      html  css  js  c++  java
  • python装饰器

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

    执行后,结果如下 

  • 相关阅读:
    Python3中urllib使用介绍
    python urllib和urllib3包
    Python--urllib3库
    Python基础-变量作用域
    Python 面向对象三(转载)
    Python 面向对象二(转载)
    Python 面向对象一(转载)
    YAML 在Python中的应用
    Redis 命令二
    基于Redis的Bloomfilter去重(转载)
  • 原文地址:https://www.cnblogs.com/CaesarLinsa/p/9061680.html
Copyright © 2011-2022 走看看