一:编写函数,(函数执行的时间用time.sleep(n)模拟)
import time
def f(x):
time.sleep(1)
print(x)
f(1)
二:编写装饰器,为函数加上统计时间的功能
import time
def f(x):
time.sleep(1)
print(x)
start_time = time.time()
f(1)
end_time = time.time()
print('运行时间为%d秒'%(end_time-start_time))
三:编写装饰器,为函数加上认证的功能
def outer(func):
def inner(*args,**kwargs):
name = input('请输入用户名:').strip()
psw = input('请输入密码:').strip()
if name == 'egon' and psw == '123':
print('登录成功')
res = func(*args,**kwargs)
return res
else:
print('登录失败')
return inner
四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
def outer(func):
def inner(*args,**kwargs):
#先取得账号密码
dic = {}
with open('user.txt','r',encoding='utf-8')as f:
for i in f:
k,v = i.strip('\n').split(':')
dic[k] = v
#登录
while True:
name = input('请输入用户名:').strip()
psw = input('请输入密码:').strip()
if name in dic and psw == dic[name]:
print('登录成功')
res = func(*args, **kwargs)
return res
else:
print('登录失败')
return inner
五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
import time
login_time = 0
login_user = None
def outer(func):
def inner(*args,**kwargs):
global login_user
if login_user == None:
#先取得账号密码
dic = {}
with open('user.txt','r',encoding='utf-8')as f:
for i in f:
k,v = i.strip('\n').split(':')
dic[k] = v
#登录
sign = True
while sign:
name = input('请输入用户名:').strip()
psw = input('请输入密码:').strip()
if name in dic and psw == dic[name]:
print('登录成功')
global login_time
login_time = time.time()
login_user = name
print(login_time)
res = func(*args, **kwargs)
end_time = time.time()
print(end_time)
if end_time - login_time >=6:
print('已超时,重新登录')
login_user = None
return res
else:
print('登录失败')
else:
res = func(*args, **kwargs)
end_time = time.time()
if end_time - login_time >= 6:
print('已超时,重新登录')
login_user = None
return res
return inner
六:编写装饰器,为多个函数加上记录日志的功能:函数一旦运行则按照下述格式记录日志
函数开始执行的时间 函数名 返回值
2020-06-18 12:13:38 index 456
2020-06-18 12:13:39 home 123
提示:
统计时间time.strftime('%Y-%m-%d %H:%M:%S')
函数名func.__name__
import time
from functools import wraps
# print('函数开始执行的时间 '+'{: ^10}'.format('函数名')+'返回值')
def outer(func):
@wraps(func)
def inner(*args,**kwargs):
res = func(*args,**kwargs)
real_time = time.strftime('%Y-%m-%d %H:%M:%S')
name = func.__name__
with open('a.log','a',encoding='utf-8')as fp:
fp.write('{}\t{: ^8}\t{}\n'.format(real_time,name,res))
return res
return inner
@outer#f = outer(f)
def ffff(x):
time.sleep(1)
print(x)
return 111
ffff(1)
@outer
def qqqq(x):
time.sleep(1.2)
print(x)
return 222
qqqq(2)
day14作业
最新推荐文章于 2024-03-07 20:56:06 发布