Python程式設計學習 裝飾器

2021-09-30 12:21:08 字數 1872 閱讀 2856

簡介:

裝飾器,python2.4版本引入的一種新特性。跟名字一樣,是用來裝飾的。其實裝飾器就是乙個函式,不過形式比較特殊,一般用」@」開頭,一般形式如下:

@deco

deffoo

():pass

上面的**等同於下面這句**:

foo = deco(foo)
裝飾器既可以和上面一樣沒有引數,也可以是帶引數的:

@decomaker(deco_args)

deffoo

():pass

等價於:

foo = decomaker(deco_args)(foo)
**舉例:

from time import ctime, sleep

deflog

(func):

def():

print

'[%s] %s() called' % (ctime(), func.__name__)

return func()

@log

deffoo

():pass

for i in xrange(5):

sleep(1); foo()

執行結果:

[mon sep 21 21:43:12 2015]

foo() called

[mon sep 21 21:43:13 2015]

foo() called

[mon sep 21 21:43:14 2015]

foo() called

[mon sep 21 21:43:15 2015]

foo() called

[mon sep 21 21:43:16 2015]

foo() called

**中使用內嵌包裝函式,保證每次呼叫函式裝飾器都會工作。在使用裝飾器的時候注意返回值,需要與原函式一致。

帶引數的裝飾器:

from time import ctime, sleep

deflog

(arg):

print

"i'm function %s" % arg

defdeco

(func):

def():

print

'[%s] %s() called' % (ctime(), func.__name__)

return func()

return deco

@log

deffoo

():pass

for i in xrange(5):

sleep(1); foo()

執行結果:

i'm

function foo

[mon sep 21

22:28:19

2015] foo() called

[mon sep 21

22:28:20

2015] foo() called

[mon sep 21

22:28:21

2015] foo() called

[mon sep 21

22:28:22

2015] foo() called

[mon sep 21

22:28:23

2015] foo() called

python學習 裝飾器

def w1 func def inner print 正在驗證 func 閉包 return inner def f1 print f1 def f2 print f2 f1 w1 f1 呼叫的 f1 發生改變 f1 在沒有修改 f1 引用的前提下,完成對 f1 的擴充套件 執行結果 在很多情況下...

python裝飾器學習

1 裝飾器的本質 閉包函式 2 裝飾器的作用 在不改變原函式的呼叫方式情況下,給原函式增加其他功能。3 開發原則 開放封閉原則。4 語法 裝飾器函式名 閉包函式 巢狀函式,內部函式呼叫外部函式的變數。def outer arg1 def inner print arg1 return inner i...

python學習(裝飾器)

裝飾器就是閉包的具體使用,可以不改變原來的函式 對其功能進行擴充。import time def outer func def inner num t1 time.time func num t2 time.time print 時間為 t2 t1 return inner outer def fu...