python中的裝飾器

2021-10-02 23:43:29 字數 2115 閱讀 4739

裝飾器是乙個函式物件:它接收乙個函式引數,將這個函式封裝為乙個新的函式後進行返回

裝飾器語法在python是一種語法糖(func1 = some_decorate(func1)),

比如:

@some_decorate

deffunc1()

:print(1

)

實際上相當於

def

func1()

:print(1

)func1 = some_decorate(func1)

這就對裝飾器的寫法有了要求,裝飾器函式相當於接受乙個函式,加上前後語法,返回封裝後的函式,比如可以這麼寫:

def

some_decorate

(f):

def(

*args,

**kwargs)

:print

("before f"

) ret = f(

*args,

**kwargs)

print

("after f"

)return ret

deffunc1

(text)

:print

(text)

return

0# 下面的語法

@some_decorate

deffunc1

(text)

:print

(text)

return

0# 相當於:

func1 = some_decorate(func1)

如果裝飾器需要接受引數,則需要進一步巢狀:

def

some_decorate

(title)

:def

inner_func1

(f):

def(

*args,

**kwargs)

:print

("%s: before f"

%(title,))

ret = f(

*args,

**kwargs)

print

("%s: after f"

%(title,))

return ret

return inner_func1

deffunc1

(text)

:print

(text)

return

0func1=some_decorate(

"title1"

)(func1)

@some_decorate(

"title1"

)def

func1

(text)

:print

(text)

return

0

或者通過如下方式:

def

(f, title)

:def

(*args,

**kwargs)

:print

("%s before f"

%title)

ret = f(

*args,

**kwargs)

print

("%s after f"

%title)

return ret

defsome_decorate

(title)

:def

inner_func

(f):

return inner_func

deffunc1

(text)

:print

(text)

return

0func1 = some_decorate(

"title2"

)(func1)

@some_decorate(

"title3"

)def

func1

(text)

:print

(text)

return

0

python中的裝飾器

其實去年就開始學python了,零零散散,陸陸續續學了點,期間學習了python web開發,爬蟲系統 但是一些基礎性的知識點長時間不看了就會忘,所以寫個部落格記錄下來,忘了可以隨時檢視,不用回去看 了,希望也能幫助大家學習哈。python中的裝飾器decorator其實是乙個高階函式,它接受乙個函...

Python 中的裝飾器

1.基本概念 問題 裝飾器是什麼?解答 嚴格來說,裝飾器只是語法糖,裝飾器是可呼叫的物件,可以像常規的可呼叫物件那樣呼叫,特殊的地方是裝飾器的引數是乙個函式 問題 裝飾器有什麼特性?解答 裝飾器有 個特性,一是可以把被裝飾的函式替換成其他函式,二是可以在載入模組時候立即執行 def decorate...

python中的 裝飾器

示例 def fun a arg print a arg fun a deffun b print b 輸出 c python34 python.exe c users administrator desktop test.pyab process finished with exit code 0...