day17_02_作业


#一:编写函数,(函数执行的时间用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
# return wrapper
#
# @timmer
# def index(x,y):
# time.sleep(2)
# print('输出:%s,%s'%(x,y))
#
# index(2,3)



# 三:编写装饰器,为函数加上认证的功能

# login_user=None
#
# def login():
# name=input('姓名:').strip()
# pwd=input('密码:').strip()
# if name == 'tank' and pwd == '123':
# #登录成功后,给全局变量赋值,记录当前用户已经登录
# print('登录成功!')
# global login_user
# login_user = name
#
# else:
# print('登录失败!')
#
# #登录认证装饰器
# def login_auth(func):
# def inner(*args,**kwargs):
#
# #被装饰对象执行前,为其添加新功能
# #在此处做登录认证、
# if login_user:
#
# #被装饰对象执行 func--->play,shopping
# res=func(*args,**kwargs)
# return res
#
# else:
# print('用户未登录,请登录!')
# login()
#
#
#
# return inner
#
#
#
# #play和shopping功能使用前必须先登录
# @login_auth
# def play():
# #不使用装饰器
# # if not login_user:
# # login()
# print('开始play')
#
#
# @login_auth
# def shopping():
# pass
#
#
# play()
# shopping()





# 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录
# 成功一次,后续的函数都无需再输入用户名和密码注意:从文件中读出字符串形式的字典,
# 可以用eval('{"name":"egon","password":"123"}')转成字典格式


# 1 打开文件,读取用户数据,转成字典类型
with open('db.txt',mode='rt',encoding='utf-8') as f:
user_data=f.read() #读取文件中的数据,得到的数据类型是:字符串
# print(user_data,type(user_data))

#eval(str)----->从str字符串中,检测python代码的语法
#如果里面有{key:vlaue},会将该数据生成对应类型的内存地址
user_dic=eval(user_data)
# print(user_dic,type(user_dic))

#
# user_dic=user_dic
login_info=None

def login():
username=input('请输入用户名:').strip()
if username in user_dic.get('name'): #获取文件中的“name"
password=input('请输入密码:').strip()
if password == user_dic.get('pwd'): #获取文件中的'pwd'
print('登录成功!')
global login_info
login_info={username:password}

else:
print('密码错误')

else:
print('用户不存在!')
#
# def login_auth(func):
# def inner(*ares,**kwargs):
# if login_info: #如果liogin_info里面有值,则登录成功
# res=func(*ares,**kwargs)
# return res
# else:
# login()
#
# return inner
#
# @login_auth
# def withdrow():
# print('开始撤退')
#
#
# @login_auth
# def shopping():
# pass
#
# withdrow()
# shopping()






# 五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,
# 在超时时间内无需重复登录,超过了超时时间,则必须重新登录

import time

sum_time=0
def time_wait(func):
#登录成功后,可以使用的功能时常(单位,秒)
wait_time= 6

def inner(*args,**kwargs):
#执行前时间
start_time=time.time()
res=func(*args,**kwargs)
#执行后时间
end_time=time.time()
global sum_time
sum_time += (end_time-start_time)

print(f'登陆后执行的总时长:{sum_time}')

#func1执行时间 >= wait_time
if sum_time >= wait_time:
#需要重新登录
login()
sum_time = 0

else:
return res
return inner

@time_wait
def func1():
time.sleep(3)

@time_wait
def func2():
time.sleep(3)

func1()
func2()

#此时总时长是6秒
func1()




















posted @ 2021-01-05 14:48  欢乐二次方  阅读(111)  评论(0)    收藏  举报