python實現decorator模式

2021-08-26 21:26:56 字數 1136 閱讀 7291

簡要說下裝飾器模式:不改變目標的內部行為,改變目標的外在表現方式的一種模式。重點在於,它一定不干涉「內政」,只可以在目標的外圍進行修飾,對目標是透明的。

函式的方法最簡單

def wrap(num):

print("wrap initialed")

def w(func):

print("w start", num)

def w2(*args):

print("w2 start")

func(*args)

print("w2 end")

return "some thing"

return w2

return w

@wrap(10)

def foo2(num, string):

print(string * num)

print("being:")

foo2(3, 'z')

foo2(4, 'y')

print(foo2)

輸出結果是:

wrap initialed

('w start', 10)

being:

w2 start

zzzw2 end

w2 start

yyyy

w2 end

這裡就相當與執行了語句

wrap(10)(foo2)(3, 'z')

每一層都先計算出本層的物件,然後再呼叫被巢狀的函式

這裡可以看到

wrap initialed

('w start', 10)

最先輸出了一次,說明雖然是包裹函式,但是其已經形成了閉包,全域性唯一

如果使用類來實現,情況也比較類似

輸出結果是:

返回了乙個閉包。通過最後一行的列印結果證實了我的想法。這個類也形成了乙個閉包。

最後一點寫參數列的心得體會是,在寫裝飾器的時候,如果拿不準func引數怎麼寫,怎麼把它包裝起來,那麼就先寫func(*args),然後再完善上面一層封包,直至最後把w(func)函式引數寫好。

理解python函式裝飾器 decorator

函式裝飾器是python有別於其他語言的主要特徵之一,這也是充分發揮了動態語言的優勢,可以使我們在編寫程式時更加簡潔。但最開始接觸函式裝飾器有點難以理解,本文盡量用簡單的語言來理解函式裝飾器。在理解函式裝飾器之前,最好儲備並理解了以下python的基礎知識 生活中,化妝可能是最容易理解裝飾行為的例子...

python實現線性回歸 python實現線性回歸

參考 機器學習實戰 machine learning in action 一 必備的包 一般而言,這幾個包是比較常見的 matplotlib,用於繪圖 numpy,陣列處理庫 pandas,強大的資料分析庫 sklearn,用於線性回歸的庫 scipy,提供很多有用的科學函式 我一般是用pip安裝,...

python爬蟲基礎實現 Python實現基礎爬蟲

初次使用urllib實現爬蟲的資料請求 urllib.request.urlopen url 發起get請求 urllib.parse.quote 將中文進行url編碼 from urllib.request importurlopen,urlretrieve,requestfrom urllib....