装饰器5--被装饰函数带有返回值,且装饰器本身带参数的情况


代码:
#home用本地认证方式;BBS用远程ldap认证。
#被装饰函数带返回值的,记得要return一下return func(*args, **kwargs)
#装饰器本身带参数的情况:
import time
user,passwd="alex","abc123"
def auth(auth_type):
#print("auth:",auth_type)
def outer_wrapper(func):
def wrapper(*args, **kwargs):
#print("wrapper:",*args,**kwargs)
if auth_type=="local":
username = input("username:").strip()
password = input("password:").strip()
if username == user and password == passwd:
print("passed")
return func(*args, **kwargs) # from home,把func()运行后的结果返回。
else:
exit("invalid")
elif auth_type=="ldap":
print("搞毛线ldap,不会---------")
return wrapper
return outer_wrapper
def index():
print("welcome to index page")
@auth(auth_type="local") #home=auth(home)
def home(): #执行home相当于执行wrapper
print("welcome to home page")
return "from home"
@auth(auth_type="ldap")
def bbs():
print("welcome to bbs page")
index()
home()
bbs()
运行结果:
welcome to index page username:alex password:abc123 passed welcome to home page 搞毛线ldap,不会--------- Process finished with exit code 0
浙公网安备 33010602011771号