1、裝飾器的定義:
給函數加上一層包裝層,以添加額外的處理
2、裝飾器的原則
一、不修改被修飾函數的源代碼
二、不修改被修飾函數的調用方式
3、示例
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')