编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件)
要求成功登陆一次,后续的函数都无需输入用户名和密码
flag=1 def wrapper(f): def inner(*args): global flag while flag: username=input("username>>>") password=input("password>>>") with open('info',mode='r',encoding='utf-8') as file: line=file.readline().split(' ') if username==line[0] and password==line[1]: print("登录成功!") flag=0 #登陆成功之后后面的函数都无需再输入用户名密码 ret=f(*args) return ret return inner @wrapper def func1(a,b): return a+b @wrapper def func2(a,b,c): return a*b*c print('func1函数执行结果:',func1(1,2)) print('func2函数执行结果:',func2(1,2,3))
运行结果:
版本二(EVa-J):
flag=0 def wrapper(f): def inner(*args): global flag if flag: ret = f(*args) return ret else: username=input(">>>") password=input(">>>") with open('info',encoding='utf-8') as file: line=file.readline().split(' ') if username==line[0] and password==line[1]: print("登录成功") flag=1 ret=f(*args) return ret else: print("登录失败") return inner @wrapper def func1(a,b): return a+b @wrapper def func2(a,b,c): return a*b*c print(func1(1,2)) print(func2(1,2,3))
编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件:
def wrapper(f): def inner(*args): ret=f(*args) with open('info1',mode='a+',encoding='utf-8') as file: name=f.__name__ file.write(name) return ret return inner @wrapper def func1(a,b): return a+b @wrapper def func2(c,d,e): return c*d*e @wrapper def func3(a,b,c,d,e): return a,b,c,d,e print(func1(1,2)) print(func2(1,2,3)) print(func3(1,2,3,4,5))
运行结果: