装饰器的补充
无参装饰器模板
def outter(func):
def wrapper(*args,**args):
res=func(*args,**args)
return res
return wrapper
装饰器:对扩展功能是开放的,对修改源代码是封闭的(开放封闭原则)
装饰器要实现的目标就是:装饰器在不修改被装饰对象源代码与调用方式的基础上为其添加新的功能
import time
def outter(func):
def wrapper(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
end_time=time.time()
print(end_time-start_time)
return res
return wrapper
@outter #index=outter(index) 等于执行了这一句
def index(x,y):
time.sleep(2)
print("index-> %s %s" %(x,y))
index(111,222)
from functools import wraps
import time
def outter(func):
@wraps(func) #这里的修饰功能很强大
def wrapper(*args,**kwargs): #要在装饰器内伪装的和装饰器一样
start_time=time.time()
res=func(*args,**kwargs)
end_time=time.time()
print(end_time-start_time)
return res
return wrapper
@outter #index=outter(index) 等于执行了这一句
def index(x,y):
"""这个是主页功能"""
time.sleep(1)
print("index-> %s %s" %(x,y))
index(111,222) #等于wrapper(111,222)
#偷梁换柱:即将原函数名指向的内存地址偷梁换柱成wrapper函数
print(index) #放的是函数的内存地址
print(index.__name__) #这里的函数名叫wrapper。怎么能做的像一点
print(index.__doc__)
#加完装饰器实现了加了和没加一样,压根不用看装饰器就当他不存在,最关键的伪装要实现
浙公网安备 33010602011771号