装饰器

1.装饰器作用

  在不改变函数调用方式的基础上,在函数前后添加功能

  

 

2.语法糖

 位置放在被装饰函数上面

def timer(f):   #装饰器函数
    def inner():
        start = time.time()
        f()       #被装饰的函数
        end = time.time()
        print(end - start)
    return inner

@timer   #语法糖:@装饰器函数名
def func():
    time.sleep(0.1)
    print('111')

#语法糖的作用相当于在此处执行:func = timer(func),即把inner赋给func

 

3.被装饰函数带返回值

def timer(f):
    def inner():
        start = time.time()
        ret = f()      #被装饰的函数
        end = time.time()
        print(end - start)
        return ret
    return inner

@timer   #语法糖:@装饰器函数名
def func():
    time.sleep(0.1)
    print('111')
    return ‘222’  #添加返回值

#语法糖的作用相当于在此处执行:func = timer(func)

ret = fun()
print(ret)
    

 

4.被装饰函数带参数

 在需要加入参数的位置全部加入参数

def timer(f):
    def inner(*args,**kwargs):  #万能形参
        start = time.time()
        ret = f(*args,**kwargs)      #被装饰的函数
        end = time.time()
        print(end - start)
        return ret
    return inner

@timer   #语法糖:@装饰器函数名
def func(a,b):
    time.sleep(0.1)
    print('111',a)
    return ‘222’  #添加返回值

#语法糖的作用相当于在此处执行:func = timer(func)

ret = fun(1,b = 2)
print(ret)

 5.装饰器固定模式

  

 

6.functiools.wraps()

  

 作用:恢复被装饰函数的属性,即用户可以按照原来的方式使用被装饰函数。

7.可随时更改是否是使用装饰器

  

@timmer_out(FLAGE):

  1.先执行函数timmer_out(FLAGE)

  2.把执行结果给@,即@timmer

 

8.多装饰器装饰一个函数

  

 执行完@wrapper1后把结果传给@wrapper执行。

posted @ 2019-08-14 12:59  tianqibucuo  阅读(145)  评论(0编辑  收藏  举报