首先要知道「@」這個符號-裝飾器,就是個語法糖,主要的作用就是「安全」。使用python裝飾器的好處就是在不用更改原函式的**前提下給函式增加新的功能。
就是裝飾器的作用,首先介紹下裝飾器:
裝飾器就是,假如已經有了乙個函式func(a,b),作用是返回a-b,但是現在要讓它返回a-b的絕對值,就要增加乙個功能,如果不使用「@」這個符號的作用的話應該如下這麼寫:
def
decorate
(func)
:def
inner
(a, b)
: ret = func(a, b)
:return
abs(ret)
return inner
defsub
(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
defsub
(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 現在我們的需...