一:编写函数,(函数执行的时间用time.sleep(n)模拟)
import time
def du():
print("嘟嘟喂嘟嘟")
time.sleep(2)
二:编写装饰器,为函数加上统计时间的功能
import time
def run_time(func):
def inner(*args, **kwargs):
start = time.time()
func(*args, **kwargs)
stop = time.time()
print('run func\'s time is', stop-start)
return inner
@run_time
def index(*args, **kwargs):
time.sleep(1)
print('welcome index')
index()
三:编写装饰器,为函数加上认证的功能
import time
def inner(func):
inp_user = input('your name:').strip()
inp_pwd = input('your password:').strip()
def file():
with open(r'db.txt', 'rt', encoding='utf-8') as f:
for line in f:
line = line.strip()
user_dic = eval(line)
if inp_user == user_dic['name']:
if inp_pwd == user_dic['password']:
print('login successful')
func(inp_user)
break
else:
print('password err')
break
else:
print('user is not find')
return file
@inner
def index(name):
time.sleep(1)
print('welcome 【%s】' % name)
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