通过做一个网页的登录验证程序来学习装饰器
import time user,passwd = 'alex','abc123' def auth (auth_type): print ("auth func:",auth_type) def outer_wrapper(func): def weapper(*args,**kwargs): print("weapper func args",*arge. **kwargs) if auth_type == "local": username = input("username:").strip() password = input("passwd:").strip() if user == username and passwd == password: print (' 33[32;1mUser has passed authentication 33[0m') res = func(*args,**kwargs) # from home print ('---after authentication ') return res else: exit(" 33[31;1mInvalid username or password 33[0m") elif auth_type == "ldap": print("不会。。。") return wrapper return outer_wrapper def index(): pirnt("welcome to index page ") @auth(auth_type="local") # home = wrapper def home(): print("home page") return "from home" @auth(auth_type="ldap") def bbs(): print("bbs page") index() print(home()) #wrapper bbs()
记住:高阶函数+嵌套函数=装饰器,其本质是函数,用来给其它函数添加新功能,且不改变原函数的调用方式。