詳解python中@的用法


這篇文章主要介紹了python中@的用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨着小編來一起學習學習吧

python中@的用法

@是一個裝飾器,針對函數,起調用傳參的作用。 
有修飾和被修飾的區別,‘@function'作為一個裝飾器,用來修飾緊跟着的函數(可以是另一個裝飾器,也可以是函數定義)。

代碼1

def funA(desA):
 print("It's funA")

def funB(desB):
 print("It's funB")

@funA
def funC():
 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
def funC():
 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
def funC():
 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
def funC():
 print("It's funC")

  

結果4

It's funA 
It's funB
None

分析4

上面將funC()作為參數傳給funA,那么funA(funC())怎么傳給funB()呢?打印desB,發現並沒有參數傳遞。 
是否可以理解為當‘裝飾器' 修飾 ‘裝飾器'時,僅是調用函數。

以上所述是小編給大家介紹的python中@的用法詳解整合,希望對大家有所幫助


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM