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

    执行后,结果如下 

  • 相关阅读:
    ES6与ES5对比 模板字符串
    ES6 4个方法
    apicloud 聊天输入框模块UIChatBox
    apiCloud 调微信支付,调支付宝支付
    apiCloud 版本号
    apiCloud 下拉刷新
    apiCloud 上拉加载
    微信小程序页面内转发 按钮 转发
    CodeSmith datagridview属性
    CodeSmith listview属性
  • 原文地址:https://www.cnblogs.com/CaesarLinsa/p/9061680.html
Copyright © 2011-2022 走看看