python中的裝飾器

2021-10-06 07:54:29 字數 1733 閱讀 7122

軟體開發中有一條非常重要的規則就是:對修改封閉,對擴充套件開放。

對於乙個現有的函式,如果想要增強此函式的功能,但是不允許修改此函式源**的時候,使用裝飾器來解決這個問題

#被修飾的函式

defsay_hello

(name)

:print

('我就是人見人愛,花見花開的%s'

%name)

# 引數是被修飾函式

def(func)

:#1.定義裝飾器

definner

(name)

:#2.定義閉包 在閉包中增加功能

print

('-'*50

) func(name)

#3.呼叫原函式實現原來的功能

print

('*'*50

)return inner #4.返回增強功能的函式

#5.獲取增強功能的函式

say_hello(

'風流小王子'

)#6. 呼叫增強函式,實現功能

使用@語法糖將裝飾器應用到指定函式上,簡化裝飾器的寫法

#用法:在需要被裝飾的函式前面加上:  @裝飾器的名字  【外層函式的名字】

def(func)

:def

inner

(age1)

:#增加的功能

if age1 <0:

age1 =

0#呼叫原函式

func(age1)

return inner

defgetage

(age)

:print

(age)

getage(18)

#呼叫增強的函式

注意:使用@的時候,如果裝飾器和需要被裝飾的函式在同乙個.py檔案中的時候,裝飾器一定要出現在被裝飾函式的前面【python中的**是從上往下依次執行的】

同乙個裝飾器可以應用於多個函式

def

(func)

:def

inner

(*tup,

**kw)

:#變長引數

func(

*tup,

**kw)

print

('-'*50

)return inner

deftest1

(a,b)

:print

(a,b)

test1(1,

2)

deftest1

(a):

print

(a)

#多個裝飾器同時作用於乙個函式的時候,要注意一下裝飾器執行順序

def(func)

:print()

definner

(a,b)

:print()

func(a,b)

return inner

def(func)

:print()

definner

(a, b)

:print()

func(a, b)

return inner

deftext

(num1,num2)

:print

(num1 + num2)

text(10,

20)

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...