python 詳解 修飾器的用法

2021-10-01 20:57:35 字數 2235 閱讀 6482

python中@的用法

@是乙個裝飾器,針對函式,起呼叫傳參的作用。

有修飾和被修飾的區別,『@function』作為乙個裝飾器,用來修飾緊跟著的函式(可以是另乙個裝飾器,也可以是函式定義)

**1

def

funa

(desa)

:print

("it's funa"

)def

funb

(desb)

:print

("it's funb")

@funa

deffunc()

:print

("it's func"

)

結果1
it's funa
分析1

@funa 修飾函式定義def func(),將func()賦值給funa()的形參。

執行的時候由上而下,先定義funa、funb,然後執行funa(func())。

此時desa=func(),然後funa()輸出『it』s funa』。

**2

def

funa

(desa)

:print

("it's funa"

)def

funb

(desb)

:print

("it's funb")

@funb

@funa

deffunc()

:print

("it's func"

)

結果2
it's funa 

it's funb

分析2

@funb 修飾裝飾器@funa,@funa 修飾函式定義def func(),將func()賦值給funa()的形參,再將funa(func())賦值給funb()。

執行的時候由上而下,先定義funa、funb,然後執行funb(funa(func()))。

此時desa=func(),然後funa()輸出『it』s funa』;desb=funa(func()),然後funb()輸出『it』s funb』。

**3

def

funa

(desa)

:print

("it's funa"

)print

('---'

)print

(desa)

desa(

)print

('---'

)def

funb

(desb)

:print

("it's funb")

@funb

@funa

deffunc()

:print

("it's func"

)

結果3
it's funa

< function func at 0x000001a5ff763c80

>

it's func

it's funb

分析3

同上,為了更直觀地看引數傳遞,列印desa,其傳的是func()的位址,即desa現在為函式desa()。

執行desa()即執行func(),desa=desa()=func()。

**4

def

funa

(desa)

:print

("it's funa"

)def

funb

(desb)

:print

("it's funb"

)print

('---'

)print

(desb)

@funb

@funa

deffunc()

:print

("it's func"

)

結果4
it's funa 

it's funb

none

分析4

上面將func()作為引數傳給funa,那麼funa(func())怎麼傳給funb()呢?列印desb,發現並沒有引數傳遞。

是否可以理解為當『裝飾器』 修飾 『裝飾器』時,僅是呼叫函式。

-------------------分割線---------------------

形象生動的講解:

python修飾符用法 python修飾符

乾貨大禮包!21天帶你輕鬆學python 文末領取更多福利 本課程來自於千鋒教育在阿里雲開發者社群學習中心上線課程 python入門2020最新大課 主講人姜偉。21天帶你輕鬆學python python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言。大資料 人工智慧時代首選程式...

python中 修飾器

參考文章 python中 修飾符 示例如下 def test func func test deffun print call fun 上面的 會輸出 call fun 修飾符有點像函式指標,python直譯器發現執行的時候如果碰到 修飾的函式,首先就解析它,找到它對應的函式進行呼叫,並且會把 修飾...

python 修飾器作用

在python的函式中,函式定義的上一行有 functionname的修飾,當直譯器讀到 這樣的修飾符之後,會先解析 後的內容,把 下一行的函式或者類作為 後邊的函式的引數,然後將返回值賦值給下一行修飾的函式物件。比如 a bdef c deffunca a print in func a deff...