装饰器并不是什么新功能,而是一种模式,通过高阶函数和嵌套函数来完成的。
当要对一个函数添加新内容时要求1、不能修改到原函数代码
2、不能修改调用此函数的调用方式
优点:当想对多个网站添加功能时,可以通过装饰器来添加功能,同而不修改到源代码。
缺点:有时函数嵌套太多对阅读者理解加大了难度。
今天完成的代码:
import time
user,passwd = 'alex','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("登录成功")
return func(*args, **kwargs) # from home
else:
exit("登陆失败")
elif auth_type == "ldap":
print("搞毛线,不会。。。。")
return wrapper
return outer_wrapper
def index():
print("welcome to index page")
@auth(auth_type="local") # home = wrapper()
def home():
print("welcome to home page")
return "from home"
@auth(auth_type="ldap")
def bbs():
print("welcome to bbs page")
print(home())
bbs()