1.装饰器的本质--一个闭包函数
2.装饰器的功能--在不锈钢原函数及其调用方式情况下对原函数功能进行拓展
3.带参数和返回值的装饰器
def timer(func):
    @wraps(func) #使这些函数生效 __doc__ 查看函数注释信息 __name__ 查看函数名
    def inner(*args,**kwargs):
        start = time.time()
        re = func(*args,**kwargs)
        print(time.time() - start)
        return re
    return inner
	
4.装饰器函数有形参
def outer(flag):
    def timer(func):
        def inner(*args,**kwargs):
            if flag:
                print('''执行函数之前要做的''')
            re = func(*args,**kwargs)
            if flag:
                print('''执行函数之后要做的''')
            return re
        return inner
    return timer
	

5.多个装饰器装饰同一个函数
执行顺序:1.执行第1个装饰器函数前的部分 2.执行第2个装饰器函数前部分
          3.执行第2个装饰器函数后的部分 4.执行第1个装饰器函数后的部分

  

生命很短,请让生活更精彩一些!