装饰器:本质是函数(装饰其它函数) 就是为其它函数添加附加功能
原则: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")