有参装饰器
有参装饰器:
def auth(argv):
def wrapper(func):
def inner(*args, **kwargs):
func(*args, **kwargs)
return inner
return wrapper
错误的案例
login_dic = {
"username": None,
"flag": False
}
def auth(argv): # argv == foo
def wrapper(func):
def inner(*args, **kwargs):
if login_dic["flag"]:
func(*args, **kwargs)
else:
if argv == "qq":
user = input("username:")
pwd = input("password:")
if user == "yulinqq" and pwd == "123": # qq
login_dic["flag"] = True
login_dic["username"] = user
func(*args, **kwargs)
else:
print("用户名或密码错误!")
elif argv == "微信":
user = input("username:")
pwd = input("password:")
if user == "yulinvx" and pwd == "123": # 微信
login_dic["flag"] = True
login_dic["username"] = user
func(*args, **kwargs)
else:
print("用户名或密码错误!")
elif argv == "抖音":
user = input("username:")
pwd = input("password:")
if user == "yulindy" and pwd == "123": # 抖音
login_dic["flag"] = True
login_dic["username"] = user
func(*args, **kwargs)
else:
print("用户名或密码错误!")
else:
user = input("username:")
pwd = input("password:")
if user == "yulin@qq.com" and pwd == "123": # 邮箱
login_dic["flag"] = True
login_dic["username"] = user
func(*args, **kwargs)
else:
print("用户名或密码错误!")
return inner
return wrapper
@auth # foo = auth(foo)
def foo():
print("这是一个被装饰的函数")
foo()
正确的案例
login_dic = {
"username": None,
"flag": False
}
def auth(argv):
def wrapper(func):
def inner(*args, **kwargs):
if login_dic["flag"]:
func(*args, **kwargs)
else:
if argv == "qq":
print("欢迎登陆qq")
user = input("username:")
pwd = input("password:")
if user == "yulinqq" and pwd == "123": # qq
login_dic["flag"] = True
login_dic["username"] = user
func(*args, **kwargs)
else:
print("用户名或密码错误!")
elif argv == "微信":
print("欢迎登陆微信")
user = input("username:")
pwd = input("password:")
if user == "yulinvx" and pwd == "123": # 微信
login_dic["flag"] = True
login_dic["username"] = user
func(*args, **kwargs)
else:
print("用户名或密码错误!")
elif argv == "抖音":
print("欢迎登陆抖音")
user = input("username:")
pwd = input("password:")
if user == "yulindy" and pwd == "123": # 抖音
login_dic["flag"] = True
login_dic["username"] = user
func(*args, **kwargs)
else:
print("用户名或密码错误!")
else:
print("欢迎登陆邮箱")
user = input("username:")
pwd = input("password:")
if user == "yulin@qq.com" and pwd == "123": # 邮箱
login_dic["flag"] = True
login_dic["username"] = user
func(*args, **kwargs)
else:
print("用户名或密码错误!")
return inner
return wrapper
msg = """
qq
微信
抖音
邮箱
请输入您要选择登陆的APP:
"""
chose = input(msg).lower()
@auth(chose)
def foo():
print("这是一个被装饰的函数")
foo()
'''
@auth(chose) 等同于以下两行代码的解构
wrapper = auth(chose)
foo = wrapper(foo)
'''

浙公网安备 33010602011771号