import time
# 装饰器的架子
def timer(func):
def wrapper():
start_time = time.time()
func()
stop_time = time.time()
print("函数运行时间%s"%(stop_time-start_time))
return wrapper
def test():
time.sleep(2)
print("函数运行完毕..")
res = timer(test) # 返回的是wrapper函数的地址
res() # 执行的是wrapper函数
语法糖语法
import time
# 装饰器的架子
def timer(func):
def wrapper():
start_time = time.time()
res = func()
stop_time = time.time()
print("函数运行时间%s"%(stop_time-start_time))
return res
return wrapper
@timer # @timer相当于 test = timer(test)
def test():
time.sleep(2)
print("函数运行完毕..")
return "test()"
res = test()
print(res)
def decorator(func):
def wrapper(*args, **kwargs):
uname = input("请输入用户名:")
pwd = input("请输入密码:")
if (uname=="张飞" and pwd == "123"):
res = func(*args, **kwargs)
return res
else:
print("用户名或密码错误")
return wrapper
@decorator
def index():
print("welcome to jd");
@decorator
def home(name):
print("welcome to home, %s"%name)
@decorator
def shopping_car(name):
print("%s的购物车都有啤酒,平板电脑"%name)
#index()
#home("张飞")
shopping_car("张飞")
user_list = [{"name":"刘备", "passwd":"123"},
{"name":"关羽", "passwd":"123"},
{"name":"张飞", "passwd":"123"},
{"name":"赵云", "passwd":"123"}]
login_user = {"username":None, "login":False}
def loadMeth(loadType="oracle"):
print("first",loadType)
def decorator(func):
print("second", loadType)
def wrapper(*args, **kwargs):
print("loadType:",loadType)
# 如果用户已经登录过,则不用再次输入用户名 密码
if login_user["username"] and login_user["login"]:
res = func(*args, **kwargs)
return res
uname = input("请输入用户名:")
pwd = input("请输入密码:")
for index, user_dic in enumerate(user_list):
if (user_dic["name"]==uname and user_dic["passwd"] == pwd):
login_user["username"] = uname
login_user["login"] = True
res = func(*args, **kwargs)
return res
print("用户名或密码错误")
return wrapper
return decorator
@loadMeth() #带参数的装饰器不是太明白. 为什么@loadMeth()和@loadMeth是不同的结构
def index():
print("welcome to jd");
@loadMeth()
def home(name):
print("welcome to home, %s"%name)
@loadMeth()
def shopping_car(name):
print("%s的购物车都有啤酒,平板电脑"%name)
print(index)
print(home)
index()
print(home)
home("赵云")
shopping_car("赵云")
print(login_user)