FLAG = False def wrapper(f): def inner(*args,**kwargs): global FLAG if FLAG: ret = f(*args, **kwargs) return ret lis = [] i = 0 while i < 3: i += 1 with open('用户信息', mode='r', encoding='utf-8', ) as user: username = input('请输入用户名:') password = input('请输入密码:') for line in user: lis.append(line) if username.strip() == lis[0].strip() and password.strip() == lis[1].strip(): print('登录成功,欢迎' + lis[0]) ret = f(*args, **kwargs) FLAG = True return ret else: print('登录失败,还剩{}次机会'.format(3 - i)) else: return '账户已被锁定' return inner @wrapper def shopping_add(): return '添加' @wrapper def shopping_del(): return '删除' print(shopping_add()) print(shopping_del()) #打印: 请输入用户名:aike 请输入密码:123456 登录成功,欢迎aike 添加 删除
知识点:
函数的装饰器
文件操作
global:解决重复登录的问题,第一次登录成功后,改变全局变量的值。程序执行时,再次调用装饰器函数,通过判断全局变量的值是否改变,改变后将不执行登录操作,直接执行被装饰的函数;