装饰器:
本质上是函数,(装饰其他函数)就是为其他函数添加附加功能。
原则:
1,不能修改被装饰的函数的源代码。(在不修改被装饰函数代码的情况下为其添加功能)
2,不能修改被装饰的函数的调用方式。 (不修改函数的调用方式)
实现装饰器知识储备:
1,函数即“变量”。
2,高阶函数。
a:把一个函数名当做实参传给另个一函数。
b:返回值中包含函数名。
3,嵌套函数。
在一个函数体内,用def去声明一个函数。(这里要跟调用分开)
高阶函数+嵌套函数=装饰器
例子1
import time def timer(func): def deco(): start_time =time.time() func() stop_time=time.time() print('test time %s'%(stop_time-start_time)) return deco @timer def test1(): time.sleep(3) print('in test1') test1()
例子2
import time def timer(func): def deco(*args,**kwargs): start_time =time.time() func(*args,**kwargs) stop_time=time.time() print('test time %s'%(stop_time-start_time)) return deco @timer #test1=timer(test1)=deco deco()=test1() def test1(): time.sleep(3) print('in test1') @timer def test2(name):#test2=timer(test2)=deco deco(name)=test2(name) print('in test2',name) test1() test2('qiangql')
例子3
import time user,passwd ='qiangql','1234' #本地的用户名密码 def auth(func): def wrapper(*args,**kwargs): username=input('username:').strip() password=input('password').strip() if user == username and passwd == password: print('