Python“三大器”之装饰器1( 三 )

回到顶部
三、装饰器练习题编写一个装饰器 , 为多个函数加上认证的功能(用户的账号密码来源于文件) , 要求登录成功一次 , 后续的函数都无需再输入用户名密码
可写完对照
【Python“三大器”之装饰器1】# 定义一个字典来做判断user_info = {"user" : None,# username与user_info["user"]来判断是否已登录用户}# 登录功能:def login():# 判断用户没有登录时 , 执行# 登陆功能print("请先登录")username = input("请输入你的用户名:").strip()password = input("请输入您的密码:").strip()# 打开密码表 , 对比账户密码是否正确with open("dir/passwd.txt", "r", encoding="utf-8") as f:for line in f:# print(line)name, pwd = line.strip("\n").split(":")# 得到[tank, 123]if username == name and password == pwd:print("登陆成功!")user_info["user"] = usernameelse:print("登录失败")# 登录认证装饰器:def login_auth(func):def inner(*args, **kwargs):# 登录认证功能# 如果已经登录 , 将被装饰对象直接调用并返回if user_info.get("user"):res = func(*args, **kwargs)return res# 如果没有登录 , 执行登录功能else:login()# 调用login()函数进行登录return inner# func1、2、3都需要先登录才能使用 , 若登陆一次 , 后续就不需要再次登录# 登陆之后可以使用的功能1@login_authdef func1():print("from func1")pass# 登陆之后可以使用的功能2@login_authdef func2():print("from func2")pass# 登陆之后可以使用的功能3@login_authdef func3():print("from func3")pass# 执行环节while True:func1()input("延迟操作")func2()func3()