把乙個函式當作引數傳遞給另乙個函式,返回乙個替代版的函式;
本質上就是乙個返回函式的函式,在不改變原函式的基礎上,給函式增加功能,函式可以作為引數被傳遞。
舉例1:
def
say():
print
('hello'
)#定義乙個裝飾器(裝飾器本身也是乙個函式,只不過它的返回值也是函式)
deffun
(f):
definner()
:print
('*********'
) f(
)print
('############'
)return inner(
)a=fun(say)
print
(a)
輸出結果:
**
*******
hello
############
none
舉例2:
def
say_hello
(name)
:return f"hello "
defbe_some
(name)
:return f"your "
defgreet_bob
(func)
:return func(
"bob"
)print
(greet_bob(say_hello)
)#將say_hello函式當作引數傳遞給greet_bob函式
print
(greet_bob(be_some)
)#將be_some函式當作引數傳遞給greet_bob函式
輸出結果:
hello bob
your bob
修飾符@的作用: 是為現有函式增加額外的功能,常用於插入日誌、效能測試、事務處理等。
建立函式修飾符的規則:
舉例1:
def
say():
# print('*********')
print
('hello'
)def
hello()
:print
('!!!!!!!!!!!!!!hello'
)#定義乙個裝飾器
deffun
(f):
definner()
:print
('*********'
) f(
)print
('############'
)return inner
#語法糖
@fun ##語法糖就是把hello()函式傳遞給fun()裝飾器函式
defhello()
:print
('!!!!!!!!!!!!!!hello'
)
say(
)
輸出結果:
say = fun(say)
print
(say
輸出結果:
hello(
)
輸出結果:
hello = fun(hello)
hello(
)
輸出結果:
舉例2:用裝飾器判斷輸入的年齡是否小於0
#定義裝飾器
defouter
(f):
definner
(age)
:if age <=0:
age =
0 f(age)
return inner
@outer #語法糖
defsay
(age)
:print
('year old:'
,age)
say(-1
)say(
10)
輸出結果:
year old:
0year old:
10
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...