python 中 裝飾器 的作用 與 理解

2022-08-09 11:51:14 字數 1578 閱讀 8438

首先要知道「@」這個符號-裝飾器,就是個語法糖,主要的作用就是「安全」。使用python裝飾器的好處就是在不用更改原函式的**前提下給函式增加新的功能。

就是裝飾器的作用,首先介紹下裝飾器:

裝飾器就是,假如已經有了乙個函式func(a,b),作用是返回a-b,但是現在要讓它返回a-b的絕對值,就要增加乙個功能,如果不使用「@」這個符號的作用的話應該如下這麼寫:

def decorate(func):

def inner(a, b):

ret = func(a, b):

return abs(ret)

return inner

def sub(a, b):

return a-b

>>>sub(3, 4)

>>> -1

>>>sub = decorate(sub)

>>>sub(3, 4)

>>> 1

看上面那個例子所示,這樣的話就要重新建立乙個新的函式來包含sub這個函式的功能,如果這樣的函式一多(即需要增加功能的函式很多),那麼會大大影響機器的功效,和**的美觀。

但是如果使用「@」符號的話,那麼**如下:

def decorate(func):

def inner(a, b):

ret = func(a, b):

return abs(ret)

return inner

@decorate

def sub(a, b):

return a-b

>>>sub(3, 4)

>>>1

如上面的結果所示現在呼叫的是sub函式而不是上個例子的呼叫decorate函式。

而且裝飾器能同時新增多個功能(比如說多個函式需要新增不同的模組,這個時候就需要將某個功能分到不同的函式中),就不用上面的例子了因為多個裝飾器就涉及到了執行順序的問題,具體如下:

總**如上,因為螢幕問題不能一下子都輸出來,結果如下:

有沒有發現這個順序是非常有趣的,多個裝飾器執行的順序就是從最後乙個裝飾器開始,執行到第乙個裝飾器,再執行函式本身。

裝飾器的外函式和內函式之間的語句是沒有裝飾到目標函式上的,而是在裝載裝飾器時的附加操作。

23~25行是裝載裝飾器的過程,相當於執行了test=dect1(dect2(test)),此時先執行dect2(test),結果是輸出aaaa、將func指向函式test、並返回函式two,然後執行dect1(two),結果是輸出1111、將func指向函式two、並返回函式one,然後進行賦值。

python中裝飾器的作用

裝飾器的概念與意義 裝飾器是python特有的一大特色,要學習併入門python,裝飾器是一道不得不跨越的坎。裝飾器本質上是乙個python函式,它可以讓其他函式在不需要做任何 變動的前提下增加額外功能,裝飾器的返回值也是乙個函式物件。定義乙個閉包,再定義乙個變數來承接內部位址不然沒法呼叫。def ...

python 中 裝飾器 的作用 與 理解

首先要知道 這個符號 裝飾器,就是個語法糖,主要的作用就是 安全 使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。就是裝飾器的作用,首先介紹下裝飾器 裝飾器就是,假如已經有了乙個函式func a,b 作用是返回a b,但是現在要讓它返回a b的絕對值,就要增加乙個功能,...

理解python中裝飾器的作用

裝飾器的作用就是用乙個新函式封裝舊函式 是舊函式 不變的情況程式設計客棧下增加功能 然後會返回乙個新函式,新函式就叫做裝飾器,一般為了簡化裝飾器會用語法糖 新函式來簡化 例子 這是一段 但功能太少,要對這個進行增強,但又不能改變 def hello return hello world 現在我們的需...