作业13
一:编写函数,(函数执行的时间用time.sleep(n)模拟)
二:编写装饰器,为函数加上统计时间的功能
三:编写装饰器,为函数加上认证的功能
import time
def auth_timmer(func):
def inner(*args,**kwargs):
useranme=input('请输入你的账号:').strip()
password=input('请输入你的密码:').strip()
if useranme=='zc' and password=='123':
print('登陆成功,正在跳转...')
start=time.time()
res=func(*args,**kwargs)
stop=time.time()
print(stop-start)
return res
else:
print('登录失败!')
return inner
@auth_timmer
def index():
time.sleep(3)
print('我很牛逼')
index()
四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
user_info={}
flag=False
def login(func):
def inner(*args, **kwargs):
global flag # 给函数内的全局变量赋值
if flag:
ret = func(*args, **kwargs)
return ret
else:
username = input('输入你的名字:')
password = input('输入你的密码:')
with open('a.txt', mode='r', encoding='utf-8') as f:
for line in f:
user, pwd = line.strip().split(':')
user_info[user] =pwd
if username == user_info and password == user_info.get(username):
flag = True
ret = func(*args, **kwargs) # func就是被装饰的函数
return ret
else:
print('错误,登录失败')
return inner
@login
def check_money(): # 两个函数有不同的功能
print('我没钱')
@login
def withdraw():
print('说了我没钱')
check_money()
withdraw()
五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
import time
user={'user':None,'login_time':None,'timeout':0.000003,}
def timmer(func):
def wrapper(*args,**kwargs):
start=time.time()
res=func(*args,**kwargs)
stop=time.time()
print('{}'.format(stop-start))
return res
return wrapper
def auth(func):
def wrapper(*args,**kwargs):
if user['user']:
timeout=time.time()-user['login_time']
if timeout < user['timeout']:
return func(*args,**kwargs)
name=input('账号: ').strip()
password=input('密码>>: ').strip()
if name == 'zc' and password == '123':
user['user']=name
user['login_time']=time.time()
res=func(*args,**kwargs)
return res
return wrapper
@auth
def check_money(): # 两个函数有不同的功能
print('我没钱')
@auth
def withdraw():
print('说了我没钱')
check_money()
withdraw('zc')

浙公网安备 33010602011771号