一對象的概念 python的所有內(nèi)容都可以作為對象,這意味著這些內(nèi)容可以作為參數(shù)作用于其他的“對象”,這不難理解,就像在函數(shù)中,可以把另一個函數(shù)作為參數(shù),甚至是類作為參數(shù),,因此經(jīng)??吹胶瘮?shù)的“嵌套”使用。
在這個例子中得到的輸出如下:
可以的看到: 之前定義的函數(shù)hi作為doSomethingBeforeHi這個函數(shù)的參數(shù),并且在輸出中并不影響它本身。 二裝飾器的作用 顧名思義,裝飾器的首要作用就是“裝飾”,它裝飾的種類有很多,只要是python的對象都可以被它所裝飾。那裝飾的意義在哪里呢? 在一個函數(shù)增加功能但是不改變其中代碼時,就可以使用裝飾器來完善這種功能,這樣做的意義在哪里呢?當這種新增功能需要運用到很多函數(shù)時,就只需要調(diào)用裝飾器,而不是在每個函數(shù)上去修改,這樣就節(jié)省了很多的時間和精力。 三裝飾器的用法 最簡單的裝飾器其實就是上面的案例,這也是最直接易懂的——將待“裝飾”的函數(shù)作為參數(shù)放入起“裝飾”作用的函數(shù)中。當然,python提供了更加簡潔且可用性更強的方法。 首先引入對應(yīng)的模塊,然后定義裝飾器,裝飾器的定義方法和函數(shù)一致,在裝飾器中,使用@wraps()的方法來接受一個函數(shù)進行封裝,在它之后定義需要增加的內(nèi)容,具體操作相信大家看代碼就一目了然了。
在這個例子中,“wrapTheFunction1”就是定義的“裝飾”函數(shù),也可以理解成“裝飾”的方法。在裝飾器定義完成后,接下來就是它的封裝和使用了。封裝裝飾器的方法很簡單,只需要@符號加上裝飾器名稱即可。
調(diào)用裝飾器時,只需要在封裝好的裝飾器下面定義或者調(diào)用相應(yīng)的函數(shù)即可。
輸出上面的函數(shù)可以看到如下結(jié)果:
需要注意的是,調(diào)用一次裝飾器只能對一個函數(shù)裝飾一次,多余的函數(shù)將不被裝飾,這很像畫油畫,被裝飾的函數(shù)就像是畫板,即使兩張畫板疊在一起,顏色也只對最上層的畫板起作用。但是在畫油畫時,畫板顏色是可以被層層覆蓋的,這是不是意味著裝飾器也可以這樣疊加呢?我們來看下面的例子。
對它進行輸出,得到如下結(jié)果
通過輸出我們可以發(fā)現(xiàn)裝飾器效果也是可以層層疊加的,這樣就讓“裝飾”這個功能變得更加有可用性。 主 編 | 王文星 責 編 | 黃章魚 能力越強,責任越大。實事求是,嚴謹細致。 ——where2go 團隊 |
|