1. 装饰器:
2. 定义:本质使函数,(装饰其他函数)就是为其他函数添加附加功能
3. 原则:1.不能修改被装饰的函数的源代码
2.不能修改被装饰的函数的调用方式
2.不能修改被装饰的函数的调用方式
4. 实现装饰器知识储备:
1.函数即“变量”
2.高阶函数
a: 把一个函数名当作实参传给另外一个函数(不修改被装饰函数的源代码的情况下为其添加功能)
b: 返回值中包含函数名(不修改函数的调用)
3.嵌套函数
1.函数即“变量”
2.高阶函数
a: 把一个函数名当作实参传给另外一个函数(不修改被装饰函数的源代码的情况下为其添加功能)
b: 返回值中包含函数名(不修改函数的调用)
3.嵌套函数
高阶函数+嵌套函数=》装饰器
示例1:
__Author__: "zhou" import timedef decotor(func): def warapper(*argv,**kwargs): start_time=time.time() func(*argv,**kwargs) stop_time=time.time() print("func is run time %s" %(stop_time-start_time)) return warapper @decotor def test1(): time.sleep(3) print("in the test1") @decotor def test2(name,age): time.sleep(3) print("in the test2") print("name=%s,age=%s" %(name,age)) test1() test2('zhou',22)***********************************************************示例2:__Author__: "zhou" user,passwd = 'zhou','abc123' def auth(auth_type): print("auth func:",auth_type) def outer_wrapper(func): def wrapper(*args, **kwargs): print("wrapper func args:",*args,**kwargs) if auth_type == "local": username = input("Username:").strip() password = input("Password:").strip() if user == username and passwd == password: print("\033[32;1mUser has ped authentication\033[0m") res = func(*args, **kwargs) return res else: print("\033[31;1mUser authentication faild\033[0m") elif auth_type == "ldap": print("这个不会") return wrapper return outer_wrapper def index(): print("welcome to index page") @auth(auth_type="local") # home = auth() def home(): print("welcome to home page") return "from home" @auth(auth_type="ldap") def bbs(): print("welcome to bbs page") index() print(home()) bbs()