簡要說下裝飾器模式:不改變目標的內部行為,改變目標的外在表現方式的一種模式。重點在於,它一定不干涉「內政」,只可以在目標的外圍進行修飾,對目標是透明的。
函式的方法最簡單
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....