作业:
# 一:编写函数,(函数执行的时间用time.sleep(n)模拟)
ANSR:
def func(name):
time.sleep(2)
print("This is home of ",name)
return "D.J.Trump"
# 二:编写装饰器,为函数加上统计时间的功能
ANSR:
import time
from functools import wraps
def timmer(func):
@wraps(func)
def wrapper(*args,**kwargs):
start_time = time.time()
res = func(*args,**kwargs)
stop_time = time.time()
print("run time is %s s" %(stop_time - start_time))
return res
return wrapper
@timmer
def func(name):
time.sleep(2)
print("This is home of ",name)
return "D.J.Trump"
func("Trump") # This is home of Trump
# run time is 2.0006821155548096 s
# 三:编写装饰器,为函数加上认证的功能
ANSR:
import time
from functools import wraps
def auth(func):
@wraps(func)
def wrapper(*args,**kwargs):
name = input("用户名:").strip()
pwd = input("密码: ").strip()
if name == "egon" and pwd == "250":
print("用户认证成功!")
res = func(*args,**kwargs)
return res
else:
print("用户名或密码错误,登录失败!")
return wrapper
@auth
def func(name):
time.sleep(2)
print("This is home of ",name)
return "D.J.Trump"
func("Trump") # 用户名:egon
# 密码: 250
# 用户认证成功!
# This is home of Trump
# 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
# 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
ANSR:
import time
from functools import wraps
login_user = None
def auth(func):
@wraps(func)
def wrapper(*args,**kwargs):
name = input("用户名:").strip()
pwd = input("密码: ").strip()
with open(r"db.txt",mode="rt",encoding="utf-8") as f:
for line in f:
dic = eval(line)
if name == dic["name"] and pwd == dic["password"]:
print("用户认证成功!")
login_user = name
res = func(*args,**kwargs)
return res
else:
print("用户名或密码错误,登录失败!")
return wrapper
@auth
def func(name):
time.sleep(2)
print("This is home of ",name)
return "D.J.Trump"
func("Trump") # 用户名:egon
# 密码: 123
# 用户认证成功!
# This is home of Trump
# 五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
ANSR:
import time
from functools import wraps
login_user = None
def auth(func):
@wraps(func)
def wrapper(*args,**kwargs):
name = input("用户名:").strip()
pwd = input("密码: ").strip()
with open(r"db.txt",mode="rt",encoding="utf-8") as f:
for line in f:
dic = eval(line)
if name == dic["name"] and pwd == dic["password"]:
print("用户认证成功!")
login_user = name
start_time = time.time()
res = func(*args,**kwargs)
while True:
stop_time = time.time()
time.sleep(2)
run_time = stop_time - start_time
if run_time >= (3600):
print("您已登录{}小时,为保证您账户的安全,系统已为您下线,请重新登录".format((run_time / 60 / 60)))
login_user = None
break
return res
else:
print("用户名或密码错误,登录失败!")
return wrapper
@auth
def func(name):
time.sleep(2)
print("This is home of ",name)
return "D.J.Trump"
func("Trump")
# 六:编写装饰器,为多个函数加上记录日志的功能:函数一旦运行则按照下述格式记录日志
函数开始执行的时间 函数名 返回值
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__
ANSR:
/