# 一:编写函数,(函数执行的时间用time.sleep(n)模拟)
import time
def index(x,y):
time.sleep(3)
print("index %s %s"%(x,y))
index(11,22)
#index(11,y=22)
#index(x=11,y=22)
# 二:编写装饰器,为函数加上统计时间的功能
import time
def timmer(func):
def wrapper(*args,**kwargs):
start = time.time()
res = func(*args,**kwargs)
stop = time.time()
print(stop-start)
return wrapper
@timmer
def index(x,y):
time.sleep(3)
print("index %s %s"%(x,y))
index(1,2)
# 三:编写装饰器,为函数加上认证的功能
import time
def login(func):
def wrapper(*args,**kwargs):
username =input('your name:').strip()
pwd =input("your password:").strip()
if username =="Anna" and pwd =="123":
res = func(*args,**kwargs)
return res
else:
print("输入有误")
return wrapper
@login
def index(x,y):
time.sleep(3)
print("index %s %s"%(x,y))
index(11,22)
# 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
# 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
import time
user_info = {"user":None}
def timmer(func):
dic = {}
def wrapper(*args,**kwargs):
with open("login.txt","r",encoding="utf-8")as f:
for linein f:
user,pwd = line.strip().split(":")
dic[user] = pwd
username =input('your name:').strip()
if usernamein dic:
password =input("your pwd:").strip()
re_password =input("your pwd:").strip()
if password == re_password:
res = func(*args,**kwargs)
return res
else:
print("输入有误")
return wrapper
@timmer
def index(x,y,z):
time.sleep(2)
print("index %s %s %s"%(x,y,z))
index(11,22,33)
# 五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
#
#
# 六:选做题
# 思考题(选做),叠加多个装饰器,加载顺序与运行顺序,可以将上述实现的装饰器叠加起来自己验证一下
# @deco1 # index=deco1(deco2.wrapper的内存地址)
# @deco2 # deco2.wrapper的内存地址=deco2(deco3.wrapper的内存地址)
# @deco3 # deco3.wrapper的内存地址=deco3(index)
# def index():
# pass