在不改变原函数的代码以及调用方式的前提下,为其增加新功能
类比游戏:更新地图,加新枪 ,加新英雄
类比游戏:开枪 扔雷 不会改变
装饰器就是一个函数
def index():
print("我爱小屋")
import time
def timer(f):
def inner():
start=time.time()
f()
time.sleep(3)
end = time.time()
print(f'测试的时间是{end-start}')
return inner
index=timer(index)
index()
import time
def timer(f):
def inner():
start=time.time()
f()
time.sleep(3)
end = time.time()
print(f'测试的时间是{end-start}')
return inner
@timer #index=timer(index)
def index():
print("我爱小屋")
index()
import time
def timer(f):
def inner():
start=time.time()
f=f()
time.sleep(3)
end = time.time()
print(f'测试的时间是{end-start}')
return f
return inner
@timer #index=timer(index)
def index():
print("我爱小屋")
return 666
index()
import time
def timer(f):
def inner(n):
start=time.time()
f=f(n)
time.sleep(3)
end = time.time()
print(f'测试的时间是{end-start}')
return f
return inner
@timer #index=timer(index)
def index(name):
print("我爱小屋")
return 666
index(n)
import time
def timer(f):
def inner(*args,**kwargs):
start=time.time()
f=f(*args,**kwargs)
time.sleep(3)
end = time.time()
print(f'测试的时间是{end-start}')
return f
return inner
@timer #index=timer(index)
def index(name,age):
print(f'{name}今年{age}岁')
return 666
index(n)
def wrapper(f):
def inner():
**添加额外的功能 执行被装饰函数前的操作 **
ret = f(*args,**kwargs)
**添加额外的功能 执行被装饰函数后的操作 **
return ret
return inner
def auth(f):
def inner(*args,**kwargs):
if status_dict["status"]:
ret=f(*args,**kwargs)
return ret
else:
username=input("请输入用户名").strip()
password=input("请输入密码").strip()
if username=="xiaowu" and password=="woaini":
print("登陆成功")
status_dict["status"]=True
ret = f(*args, **kwargs)
return ret
else:
print("登录失败")
return inner
status_dict={
"status":False
}
def login():
print("请完成登陆功能")
@auth
def article():
print("欢迎访问文章")
@auth
def comment():
print("欢迎访问评论")
@auth
def dariy():
print("欢迎访问日记")
article()
comment()
dariy()
原文:https://www.cnblogs.com/xueba/p/12387462.html