Python自學之樂-裝飾器淺談
以前學過點 面向對象的知識,我感覺這之間是有關聯的,比如說裝飾器的第一個要素是對被裝飾的函數的封閉性,不允許更改;第二個就是對裝飾器本oj身的可擴展性。
裝飾器要點:高階函數+嵌套函數=裝飾器
需要掌握的知識點:1、函數即變量
2、高階函數(函數的參數也是函數)
3、嵌套函數
裝飾器一:裝飾器不帶參數,被裝飾的函數也不帶參數
簡單的需求:現有兩個簡單的打印內容的函數,現在需要在不改變兩個函數源代碼的情況下統計每個函數運行時間
import time
def timer(func):#用到高階函數
def deco():#用到函數嵌套
start_time = time.time()
func()
stop_time = time.time()
print("the func run %s" %(stop_time-start_time))
return deco
@timer
def test1():
time.sleep(3)
print("i am test1")
@timer
def test2():
time.sleep(3)
print("i am test2")
test1()
test2()
執行順序:首先程序自上往下走,[email protected]
裝飾器的效果就是:沒有改變原來函數的源代碼和函數調用方式,又給函數增加了新功能
裝飾器二:被裝飾函數帶參數
裝飾器三:被裝飾函數有返回值
裝飾器四:裝飾器本身帶參數
Python自學之樂-裝飾器淺談