Python裝飾器(Decorate)使用圖解

一、裝飾器是什麼?

Python裝飾器其實就是一個返回值爲函數的高階函數,其中至少嵌套一個函數(作爲返回值返回)。


二、裝飾器工作原理。

遵循編程的閉合原則,在不修改原函數代碼的基礎上增加功能,使用裝飾器是一種很好的選擇。

裝飾器工作基於以下兩步完成:

第一步:被裝飾的函數作爲參數傳給裝飾器函數,並執行裝飾器函數,返回值記作newFunction;

第二步:原函數名重新被賦值爲newFunction。

wKioL1ZhI_nxS6QGAAXpjgROGcQ455.jpg

PS:當執行f1函數時,首先執行裝飾器auth,並將原f1函數作爲參數傳遞給裝飾器函數,裝飾器返回一個inner函數並將該函數賦值給f1,即f1() = inner()。

原函數好像是一個小盒子,裝飾器相當於一個大盒子,原函數加載裝飾器就好比在小盒子外面嵌套一個大盒子。


三、動態參數,裝飾含有N個參數的函數。

wKioL1ZhN2rDxmMhAAggZqlXPXc253.jpg

裝飾含有不同參數個數及格式的函數,可以給裝飾器定義動態參數,由裝飾器將動態參數傳遞給原函數。


四、裝飾有返回值的函數。

wKioL1ZhOYuy40o9AAhAXq6yo8Q714.jpg

裝飾器inner的返回值如不指定,默認爲None。如果使用過裝飾器之後,還想得到原函數的返回值,只需在裝飾器中接收原函數的返回值,並將其返回。


wKiom1ZhRtXgOJSzAAoOtzKvzMw191.jpg

使用裝飾器實現登錄驗證。


五、多層裝飾器(同時加載多個裝飾器)。

wKiom1ZhTFbRpkCCAAZWCDBtBX0394.jpg

多裝飾器可以累加使用,類似於盒子模型,以嵌套形式層層累加。


六、帶參數的裝飾器。

wKiom1ZhXr-DoZ76AAhZzb5C9Kw593.jpg

帶參數的裝飾器更爲靈活,可以接收任意函數作爲參數,然後動態生成新的基礎裝飾器,然後用新裝飾器去裝飾原函數。

這樣,可以指定在原函數執行前運行某一個程序,在原函數執行之後運行另一個程序。


over.

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