簡單例子理解裝飾器
阿新 • • 發佈:2019-02-19
python中的裝飾器可謂極其神祕,雖然常聽到,使用裝飾器會讓程式碼如虎添翼,網上更是用內褲外面加長褲來形象的解釋裝飾器,但我硬是看了很多次都不得要領。
但我不能就這麼放棄啊,終於還是搞明白了點點,雖然不全面,但也算對裝飾器有了初步的瞭解吧。
先上一個簡單的例子:
#!/usr/bin/env python2 # -*- coding: utf-8 -*- def decorate(abc): def test(): print "test begin" print "==============" abc() print "==============" print "test end" return test @decorate def guoguo(): print "test" guoguo()
執行結果:
test begin
==============
test
==============
test end
分析:
從執行結果來看,函式guoguo()本身只有一句話,但在外面又包裹了兩句,就如同夾心餅乾一樣把guoguo()包裹起來,這就是裝飾器的作用。它本身不會改變原函式,只會在原函式基礎上增加新功能。當然這樣做的好處也顯而易見,就是便於維護。
那麼裝飾器是怎麼工作的呢?該程式是怎麼執行的呢?
首先,程式開始從guoguo()執行了,結果它發現該函式前面有個@,就知道該函式被裝飾了,那就先去看看裝飾了哪些功能吧。
然後,該函式就作為引數進入到decorate()中,返回另一個函式test。
最後,test()中就把需要新增給guoguo()的功能寫在此處,如果需要guoguo()的結果,就在需要的地方呼叫即可。
這就是我理解的裝飾器,概況來說,就是把需要裝飾的函式當做裝飾器函式的引數,然後返回一個新函式,在新函式中實現裝飾功能。