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
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' 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
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' 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基础教程:python中@的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3 中hasattr()、g
- 下一篇: Python函数的定义和使用