装饰器:本质是函数,用来装饰其他函数,为其他函数添加附加功能
原则:不能修改被装饰函数的源代码及调用方式
实现装饰器的知识点:
1、函数即“变量”
2、高阶函数
a、把一个函数名当作实参传给另一个函数
b、返回值中包含函数名
3、嵌套函数
不带参数的装饰器
1 import time 2 3 def timer(func): 4 def ff(*args,**kwargs): 5 start_time = time.time() 6 func(*args,**kwargs) 7 end_time = time.time() 8 print('run times {}'.format(end_time - start_time)) 9 return ff 10 @timer 11 def test1(): 12 time.sleep(3) 13 print('in the test1') 14 15 test1()
带参数的装饰器
1 import time 2 3 def timer(type='sort'): #装饰器 4 def outer(func): 5 def ff(*args,**kwargs): 6 if type == 'sort': 7 start_time = time.time() 8 func(*args,**kwargs) 9 end_time = time.time() 10 print('run times {}'.format(end_time - start_time)) 11 elif type == 'long': 12 print('long') 13 return ff 14 return outer 15 @timer() 16 def test1(): 17 time.sleep(3) 18 print('in the test1') 19 20 test1()