Python_装饰器_29

# 装饰器形成的过程 : 最简单的装饰器 有返回值的 有一个参数 万能参数
# 装饰器的作用
# 原则 :开放封闭原则
# 语法糖 :@
# 装饰器的固定模式



import time
# print(time.time()) # 获取当前时间
# time.sleep(10)  #让程序在执行到这个位置的时候停一会儿


def timmer(f):
    start = time.time()
    f()
    end = time.time()
    print(end - start)
    
def func():
    time.sleep(0.01)
    print(大家好!)
    
timmer(func)
#fun()

装饰器:

import time

def func():     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好')

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

    return inner

func = timmer(func)
func()
接受被装饰的函数的返回值

import time

def timmer(f):    #装饰器函数
    def inner():
        start = time.time()
        ret = f()       #被装饰的函数
        end = time.time()
        print(end - start)
        return ret # 接受被装饰的函数的返回值    不能直接return f()
    return inner

@timmer         #语法糖 @装饰器函数名
def func():     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好')
    return '新年好'
# func = timmer(func)  # 语法糖 取代这条
ret = func()   #inner()
print(ret)
# 装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能
# timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用

# 原则: 开放封闭原则
#   开放 : 对扩展是开放的
#   封闭 : 对修改是封闭的

# 封版
# def outer():
#     def inner():
#         return 'inner'
#     inner()
#
# outer()
装饰带参数函数的装饰器

#装饰带参数函数的装饰器
import time

def timmer(f):    #装饰器函数
    def inner(*args,**kwargs):
        #(1,2) /(1)
        start = time.time()
        ret = f(*args,**kwargs)  #f(1,2)       #被装饰的函数
        end = time.time()
        print(end - start)
        return ret
    return inner

@timmer         #语法糖 @装饰器函数名
def func(a,b):     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好',a,b)
    return '新年好'

@timmer         #语法糖 @装饰器函数名
def func1(a):     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好',a)
    return '新年好'
# func = timmer(func)
ret = func(1,2)   #inner()
ret = func(a=1,b=2)   #inner()
ret = func(1,b=2)   #inner()
ret = func(b=1,a=2)   #inner()
print(ret)

装饰器模板:

def wrapper(f):    #装饰器函数,f是被装饰的函数
    def inner(*args,**kwargs):
        '''在被装饰函数之前要做的事'''
        ret = f(*args,**kwargs)    #被装饰的函数
        '''在被装饰函数之后要做的事'''
        return ret
    return inner

@wrapper         #语法糖 @装饰器函数名
def func(a,b):     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好',a,b)
    return '新年好'

def wrapper():
    def inner():
        pass
    return inner
def wrapper(func):   #qqxing
    def inner(*args,**kwargs):
        ret = func(*args,**kwargs)   #被装饰的函数
        return ret
    return inner

@wrapper        #qqxing = wrapper(qqxing)
def qqxing():
    print(123)

ret = qqxing()   #inner

猜你喜欢

转载自www.cnblogs.com/LXL616/p/10663772.html