作业3月23号
一:编写函数,(函数执行的时间用time.sleep(n)模拟)
二:编写装饰器,为函数加上统计时间的功能
import time def timmer(func): def wrapper(*args,**kwargs): start=time.time() res=func(*args,**kwargs) stop=time.time() print(stop - start) return res
三:编写装饰器,为函数加上认证的功能
四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
import time login_user = None login_time = None def check_session(func): time_out = 4 def wrapper(*args,**kwargs): global login_user,login_time res = func(*args,**kwargs) end = time.time() if end - login_time > time_out: login_user = None print('登陆超时') login_time = None return res return wrapper def check_login(func): def wrapper(*args, **kwargs): global login_user,login_time if login_user: func(*args, **kwargs) else: ipt_account = input('输入账号:').strip() ipt_pwd = input('输入密码:').strip() with open('db.txt', mode='rt', encoding='utf-8') as f: for i in f: if [ipt_account, ipt_pwd] == i.strip('\n').split(':'): login_user = ipt_account print('登陆成功,现在可以使用功能') login_time = time.time() break else: print('账户名或密码错误,无法使用功能') return wrapper @check_session @check_login def func1(cmd): print('func1', cmd) @check_session @check_login def func2(cmd): print('func2', cmd) menu = { '1': ['func1', func1], '2': ['func2', func2], '3': ['exit', exit] } while True: for i in menu: print(i, menu[i][0]) cmd = input('cmd:').strip() menu[cmd][1](cmd)