装饰器:本质是函数(装饰其它函数) 就是为其它函数添加附加功能

原则:1.不能修改被装饰函数的源代码

   2.不能修改被装饰的函数的调用方式

实现装饰器知识储备:

1.函数即变量

2.高阶函数:a.把一个函数名当做实参传给另外一个函数,(在不修改被装饰函数源代码情况下添加功能)b.返回值中包含函数名(不修改函数的调用方式)

3.嵌套函数a.

匿名函数:

lambda

高阶函数
import time
def car():#定义一个源代码
    print ("in the car")


def change_test(func):#定义一个改变函数的函数,传递函数参数
    time_start=time.time()
    time.sleep(3)
    time_stop=time.time()
    print("sleep in the change_test %s"%(time_stop-time_start))
    return func
car=change_test(car)#把内存地址赋给原来的函数标识
car()

 实现装饰函数


import time
#实现功能,在不能改变原来的函数前添加功能。

#实现在测试函数的运行时间,不能改变原函数

def deco(func):#定义一个装饰器
def run_time(*args,**kwargs):#嵌套一个运行时间的函数 无论传什么参数都可以
start_time=time.time()
func(*args,**kwargs)#运行 函数 无论传什么参数都可以
stop_time=time.time()
print("该函数运行的时间是%s"%(stop_time-start_time))

return run_time#返回嵌套函数的内存地址


@deco#这一步是需要在哪个函数上装饰就在哪个函数前面加装饰。 它的功能相当于是比如 car=deco(car)
def car():#定义一个原函数
time.sleep(2)
print("in the car")
@deco
def baike(name):#有参数的函数
print("in the baike %s"%name)

car()
baike("hunterYi")