一:编写函数,(函数执行的时间用time.sleep(n)模拟)
import time
def index(x, y):
start = time.time()
time.sleep(3)
print(f'index:{x, y}')
stop = time.time()
print(stop - start)
二:编写装饰器,为函数加上统计时间的功能
import time
def timmer(func):
def timmer_start(*args, **kwargs):
start = time.time()
func(*args, **kwargs)
print('开始时间:', start)
time.sleep(4)
stop = time.time()
print('结束时间:', stop)
print('时间间隔:', stop - start)
return timmer_start
@timmer
def timemer_sleep(*args, **kwargs):
time.sleep(3)
print()
timemer_sleep()
三:编写装饰器,为函数加上认证的功能
import time
def login(func):
def wrapper():
name = input('用户名: ').strip()
upass = input('密码').strip()
if name == 'yan' and upass == '123':
res = func()
print('登陆成功')
return res
else:
print('账号或密码不正确')
return wrapper
def timmer(func):
def wrapper():
start = time.time()
func()
stop = time.time()
print(stop - start)
return wrapper
@login
@timmer
def index():
time.sleep(3)
print('欢迎登录')
index()
四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
六:选做题
思考题(选做),叠加多个装饰器,加载顺序与运行顺序,可以将上述实现的装饰器叠加起来自己验证一下
@deco1 # index=deco1(deco2.wrapper的内存地址)
@deco2 # deco2.wrapper的内存地址=deco2(deco3.wrapper的内存地址)
@deco3 # deco3.wrapper的内存地址=deco3(index)
def index():
pass