----装饰器

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
fun()

    

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执行。

猜你喜欢

转载自www.cnblogs.com/cky-2907183182/p/11347756.html