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()的結果,就在需要的地方呼叫即可。
這就是我理解的裝飾器,概況來說,就是把需要裝飾的函式當做裝飾器函式的引數,然後返回乙個新函式,在新函式中實現裝飾功能。
正確理解裝飾器
定義三個函式,w1函式內定義乙個內部函式,w1函式的返回值是乙個函式名 def w1 func definner print 驗證 func return inner deff1 print f1 deff2 print f2 test w1 f1 test 這相當於將f1函式傳遞給w1返回乙個函式...
python 在場景中理解裝飾器
原來我也自己通過查資料,來學習python的裝飾器,但是效果不好。因為沒有接觸過需要用到裝飾器的場景,所以 一起的資料都只停留在紙面上,但是今天偶然看到了vimer的這篇文章 我們就根據這篇文章的思路來,在場景中理解python裝飾器 解決方案 該爬蟲呼叫三個方法,設計乙個通用的方法 根據每個方法的...
python 在場景中理解裝飾器
原來我也自己通過查資料,來學習python的裝飾器,但是效果不好。因為沒有接觸過需要用到裝飾器的場景,所以 一起的資料都只停留在紙面上,但是今天偶然看到了vimer的這篇文章 我們就根據這篇文章的思路來,在場景中理解python裝飾器 解決方案 該爬蟲呼叫三個方法,設計乙個通用的方法 根據每個方法的...