Python入門---修飾器

       已經有了C、C++的基礎,就想再來玩一玩Python,Python的數據類型、函數定義調用都還OK,吃編程基礎不難理解,但接下來學習的知識與C、C++差別就有點大了,比如修飾器,下面是一個舉例代碼。
      首先修飾器是幹嗎用的呢,他是用來修飾函數的,在不改變原函數的調用方式的前提下,爲原函數擴充某些功能。這個例子是從教學視頻上學來的,感覺老師講的不錯,拿來與大家分享分享。
      
import time

def timer(func):
    def deco():
        start_time=time.time()
        func()
        stop_time = time.time()
        print("The func time is %s"%(stop_time-start_time))
    return deco

@timer # test1 = timer(test1)
def test1():
    time.sleep(3)
    print("in the test1")
test1()

      這是個比較簡單的修飾器程序,該修飾器爲函數test1()擴充的功能是:爲test1()函數的運行計時。
      程序的運行過程有點複雜,所以記錄下來一遍以後參考:
(1)程序開始:定義函數timer,注意對於Python定義函數可以理解爲開闢一塊內存來存放函數的程序,不去執行,甚至不執行檢查其中內容的操作,這是Python與C、C++不一樣的地方。
(2)執行@timer,這裏其實就是執行 
test1 = timer(test1)
       不知道編譯器是怎麼知道test1的地址的,不過這裏暫且這樣認爲:執行這一句是程序先把test1定義,即先爲test1開闢一塊內存空間,再執行timer(test1)。執行這一句即定義函數deco,爲其開闢內存空間來存儲代碼。最後返回deco的存儲地址,並把它賦值給test1。
       執行完這一句後,實際上test1已經被偷樑換柱成了deco。
(3)執行test1(),即執行deco()。這樣便把擴展功能加了上去。

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章