一、装饰器的定义:
给函数加上一层包装层,以添加额外的处理
二、装饰器的原则
1、不修改被修饰函数的源代码
2、不修改被修饰函数的调用方式
三、示例
import time
def timer(func): #func的实参是index
def wrapper(*args,**kwargs):
start_time=time.time() #定义一个开始时间
func(*args,**kwargs) #index()调用的是index()函数,先睡眠三秒,打印print("index运行时间")
stop_time=time.time() #定义一个结束时间
print('运行时间为%s' %(stop_time-start_time))
return wrapper #wrapper函数的内存地址
@timer #=====index=timmer(index)
def index():
time.sleep(3)
print("index运行时间")
def init(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
next(res)
return res
return wrapper
@init #装饰器的调用方法===>get=init(get)
def get():
while True:
url=yield
res=urlopen(url).read()
print(res)
g=get()
g.send("http://www.baidu.com")
g.send('http://www.python.org')
g.send('http://www.163.com')