一、裝飾器
裝飾器:本質(zhì)是函數(shù)俐镐,(裝飾其他函數(shù))矫限,就是位其他函數(shù)添加附加功能。
在Python里佩抹,裝飾器(Decorator)是一種極簡的調(diào)用高階函數(shù)(higher-order function)的語法叼风。Python里,裝飾器(Decorator)就是一個函數(shù)棍苹,她接受另一個函數(shù)作為參數(shù)无宿,然后在不直接修改這個函數(shù)的情況下,擴(kuò)展該函數(shù)的行為廊勃,最終再將該函數(shù)返回。
原則:
1)不能修改被裝飾的函數(shù)的源代碼经窖。 func1去修飾其他函數(shù)坡垫,那么func1的源代碼不能修改。
2)不能修改被裝飾函數(shù)的調(diào)用方式画侣。
實現(xiàn)裝飾器知識儲備:
1)函數(shù)即變量
2)高階函數(shù)
3)嵌套函數(shù)
高階函數(shù)+嵌套函數(shù) =》裝飾器冰悠。
裝飾器實例:
import time
# 手寫一個裝飾器
def timmer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
func()
stop_time = time.time()
print ('the func run time is %s' %(stop_time - start_time))
return wrapper
@timmer
def test1():
time.sleep(3)
print ('in the test1')
test1()
首先遵循上面的幾個原則。
對于被裝飾函數(shù)test1()
來說配乱,就如沒有裝飾器的函數(shù)一樣溉卓。
擴(kuò)展被裝飾函數(shù)的行為皮迟。
函數(shù)體在內(nèi)存中就是一堆字符串。
函數(shù)就是變量桑寨,變量是有內(nèi)存回收機(jī)制的,函數(shù)也就是了。
python解釋器一解釋到秩冈,那么內(nèi)存中就存在了萌庆,就可以調(diào)用了。
傳遞的函數(shù)沙咏,可以運行:
可以函數(shù)內(nèi)存地址加上()
去調(diào)用函數(shù)辨图。
高階函數(shù)的兩個功能:
函數(shù)的嵌套:
裝飾器。
import time
def test1():
time.sleep(3)
print ('in the test1')
def test2():
time.sleep(2)
print ('in the test2')
def deco(func):
def wrapper():
start_time = time.time()
func()
stop_time = time.time()
print ('run time %s' % (stop_time - start_time))
return wrapper
test1 = deco(test1)
test1()
@一個函數(shù)名
@timer
def test1():
xxxx
等價于:
test1 = timer(test1)
加了斷點的話肢藐,運行故河,就使用debug運行。