通过做一个网页的登录验证程序来学习装饰器
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 ('\033[32;1mUser has passed authentication\033[0m')
res = func(*args,**kwargs) # from home
print ('---after authentication ')
return res
else:
exit("\033[31;1mInvalid username or password\033[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()
记住:高阶函数+嵌套函数=装饰器,其本质是函数,用来给其它函数添加新功能,且不改变原函数的调用方式。