1. 程式人生 > >簡單例子理解裝飾器

簡單例子理解裝飾器

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()的結果,就在需要的地方呼叫即可。

這就是我理解的裝飾器,概況來說,就是把需要裝飾的函式當做裝飾器函式的引數,然後返回一個新函式,在新函式中實現裝飾功能。