史上最詳細的Python裝飾器解釋

2021-10-24 13:58:40 字數 2380 閱讀 3400

在python中有個概念叫裝飾器,很多初學者最初聽到這個名詞的時候可能都會一臉懵逼,包括我之前也是,那麼什麼是裝飾器呢。

裝飾器本質就是函式,作用是裝飾其它函式,給其它函式增加附加功能,提高**復用,減少**量。

實現裝飾器的條件:

存在閉包現象

被裝飾的函式做裝飾器函式的引數

關於閉包在我的另一篇文章中會有詳細介紹

def

decorator

(func)

:print

("這是乙個裝飾器"

)def

(*args,

**kwgs)

:print

("開始裝修"

) func(

)print

("裝修完畢")

@decorator

defhouse()

:print

("我是毛坯房"

)house(

)

執行結果:

:#func用來接收被裝飾函式

print

("這是乙個裝飾器"

)def

(*args,

**kwgs)

:#接收house函式中的引數,如果沒有則不接收

print

("開始裝修"

) func(

)print

("裝修完畢")

@decorator

defhouse()

:print

("我是毛坯房"

)執行結果:

當多個裝飾器裝飾同乙個函式時,其實原理跟上面所講的也是一樣的,裝飾的順序先用離被裝飾函式最近的那個裝飾器來裝飾,下面用乙個例子來說明

def

decorator1

(func1)

:print

("這是第乙個裝飾器"

)def

(*args,

**kwgs)

:print

("開始裝修"

) func1(

)print

("裝修完畢"

)def

decorator2

(func2)

:print

("這是第二個裝飾器"

)def

(*args,

**kwgs)

:print

("開始第二次裝修"

) func2(

)print

("第二次裝修完畢"

)@decorator2

@decorator1

defhouse()

:print

("我是毛坯房"

)house(

)

執行結果:

我直接畫出流程圖來解釋這段**的執行過程

當裝飾器需要傳參進去時,那麼我們就必須要定義三層巢狀結構,並且返回兩次

def

outer

(a):

#第一層用來接收裝飾器的引數

defdecorator

(func)

:#第二層接收被裝飾函式

print

("這是乙個裝飾器"

)def

(*args,

**kwgs)

:#第三層用來接收被裝飾函式的引數

print

("開始裝修"

,a) func(

)print

("裝修完畢"

) return decorator

@outer(

"別墅"

)def

house()

:print

("我是毛坯房"

)house(

)

執行結果

當我們使用@outer(「別墅」)時,"別墅"會傳給引數a,然後return decorator,然後後面的執行過程就跟前面所說的一樣了,既會使用decorator函式去裝飾house函式

史上最詳細https配置

https不僅僅是安全的一種體現,更是一種裝逼體現,然而網上的https配置大全沒有乙個靠譜的,關鍵是他們配置https怎麼就不知道截圖了?第一步 獲取https證書 然後有個免費申請網域名稱的入口,企鵝說免費應該是免費的 進入這個入口 然後我們選擇圖上型別的證書,有效期1年 自己玩,如果企業證書的...

史上最詳細前端安全

前端不需要過硬的網路安全方面的知識,但是能夠了解大多數的網路安全,並且可以進行簡單的防禦前兩三個是需要的 介紹一下常見的安全問題,解決方式,和小的demo,希望大家喜歡 在我看來,前端可以了解並且防禦前4個就可以了 小聲逼逼 大佬當我沒說 cross site scripting 又叫做跨站指令碼攻...

史上最詳細webpack講解

webpack是前端方面的靜態資源打包工具,能夠讓瀏覽器也支援模組化,他會根據模組的依賴關係進行靜態分析,然後按照某種規則生成靜態資源 安裝webpack 安裝webpack npm install g webpack 或者 安裝最新版webpack npm install g webpack 如果...