在python中有個概念叫裝飾器,很多初學者最初聽到這個名詞的時候可能都會一臉懵逼,包括我之前也是,那麼什麼是裝飾器呢。
裝飾器本質就是函式,作用是裝飾其它函式,給其它函式增加附加功能,提高**復用,減少**量。
實現裝飾器的條件:
存在閉包現象
被裝飾的函式做裝飾器函式的引數
關於閉包在我的另一篇文章中會有詳細介紹
def
decorator
(func)
:print
("這是乙個裝飾器"
)def
(*args,
**kwgs)
:print
("開始裝修"
) func(
)print
("裝修完畢")
@decorator
defhouse()
:print
("我是毛坯房"
)house(
)
執行結果:
:#func用來接收被裝飾函式
("這是乙個裝飾器"
)def
(*args,
**kwgs)
:#接收house函式中的引數,如果沒有則不接收
("開始裝修"
) func(
("裝修完畢")
@decorator
defhouse()
("我是毛坯房"
)執行結果:
當多個裝飾器裝飾同乙個函式時,其實原理跟上面所講的也是一樣的,裝飾的順序先用離被裝飾函式最近的那個裝飾器來裝飾,下面用乙個例子來說明
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 如果...