'''
叠加装饰器:
在同一个被装饰对象,添加多个装饰器,并执行。
@装饰1
@装饰2
@装饰3
def 被装饰对象():
pass
注意:装饰器在调用被装饰对象才会执行添加的功能。
叠加装饰器:
装饰的顺序:由下到上装饰
执行顺序:由上到下
注意:无论inner中出现任何判断,最后都要返回'调用
后的被装饰对象'fenc(*args, **kwargs)
'''
# 模板
# def wrpper(func):
# def inner(*args, **kwargs):
# # 注册
# res = func(*args, **kwargs)
# # 登录
# return res
# return inner
# 为被装饰对象,添加统计时间 与 登录认证功能
import time
user_info = {
'user':None
}
# 登录功能
def login():
# 判断用户没有登录时,实行
username = input('输入账号:').strip()
password = input('输入密码:').strip()
with open(f'z.txt','r',encoding='utf-8')as f:
for line in f:
print(line)
name, pwd = line.strip('
').split(':')
# 字符串切分返回列表
if username == name and password == pwd:
print('登录成功')
user_info['user'] = username
return True
else:
print('登录失败')
return False
# 登录认证装饰器
def login_auth(func):
def inner1(*args, **kwargs):
'''
无论inner中出现人和判断,
最后都要返回'调用后的被装饰对象' funs(*args, **kwargs)
'''
# 登录认证
if user_info.get('user'):
res = func(*args, **kwargs)
return res
else:
flag = login()
# 添加用户是否登录判断
if flag:
res = func(*args, **kwargs)
return res
else:
login()
return func(*args, **kwargs)
return inner1
# 统计时间装饰器
def time_record(func):
def inner2(*args, **kwargs):
k_time = time.time()
res = func(*args, **kwargs)
j_time = time.time()
print(f'消耗时间为:{j_time - k_time}')