亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python裝飾器"@"使用實例深入探究

 更新時間:2024年01月08日 11:32:52   作者:碼頭青年人  
這篇文章主要為大家介紹了python裝飾器"@"使用實例深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

基礎(chǔ)語法

裝飾器是 Python 中一種強大且靈活的特性,用于修改或擴展函數(shù)或方法的行為。裝飾器本質(zhì)上是一個函數(shù),它接收一個函數(shù)作為參數(shù),并返回一個新的函數(shù)或可調(diào)用對象。

舉例:

def funA(func):
   def wrapper():
       print("itmatou")
       func()
       print("itmatou2")
   return wrapper

@funA
def funB():
   print("Hello!")

funB()

其輸出結(jié)果為:

itmatou
Hello!
itmatou2

分析:

在這個例子中,funA 是一個簡單的裝飾器函數(shù),它接收一個函數(shù) func,然后返回一個新的函數(shù) wrapper。通過在 funB 函數(shù)定義上使用 @funA 語法,實際上相當于執(zhí)行了 funB = funA(funB)。調(diào)用 funB 時,實際上是調(diào)用了 wrapper 函數(shù)。

  • 將 funB 作為參數(shù)傳給 funA 函數(shù);
  • 將 funA 函數(shù)執(zhí)行完成的返回值反饋回 funB。
  • 等價于:funB = funA(funB)

帶參數(shù)的裝飾器

funB() 函數(shù)無參數(shù)時,直接將 funB() 作為 funA() 的參數(shù)傳入。如果當 funB() 函數(shù)帶有參數(shù)時,應該如何傳值那?

舉例:

def funA(func):
   def wrapper(say):
       print("itmatou:", say)
   return wrapper
@funA
def funB(say):
   print("Hello!")
funB("hello")

其輸出結(jié)果為:

itmatou: hello

在實際應用中,裝飾器 funA 是提前寫好的,并不確認調(diào)用它的函數(shù)帶有幾個參數(shù),所以這里用到*args, **kwargs

*args是一個特殊的參數(shù),在函數(shù)定義時以星號開頭,用于傳遞不確定數(shù)量的位置參數(shù)。作為一個元組(tuple)處理。

**kwargs是另一個特殊的參數(shù),在函數(shù)定義時以兩個星號開頭,用于傳遞不確定數(shù)量的關(guān)鍵字參數(shù)。作為一個字典(dict)來處理。

舉例:

def funA(func):
   def wrapper(*args, **kwargs):
       func(*args, **kwargs)
   return wrapper
@funA
def funB(say):
   print("Hello!", say)
@funA
def funC(say, say1):
   print("Hello!", say, say1)
funB("我是B")
funC("我是C", "CC")

其輸出結(jié)果為:

Hello! 我是B
Hello! 我是C CC

裝飾器本身也可以接收參數(shù):

舉例:

def funA_with_args(arg):
   def funA(func):
       def wrapper(*args, **kwargs):
           print(arg)
           func(*args, **kwargs)
       return wrapper
   return funA
@funA_with_args("我是裝飾器自帶的參數(shù)")
def funB(say):
   print("Hello!", say)
funB("我是B")

其輸出結(jié)果為:

Hello! 我是B
Hello! 我是C CC

函數(shù)裝飾器還可以嵌套:

舉例:

@funA
@funB
@funC
def fun():
   ###

其執(zhí)行順序相當于:

fun = funA(funB(funC(fun)))

類裝飾器

除了函數(shù)裝飾器,你還可以使用類作為裝飾器。類裝飾器需要實現(xiàn)__call__方法。

舉例:

class MyDecorator:
   def __init__(self, func):
       self.func = func

   def __call__(self, *args, **kwargs):
       print("itmatou")
       self.func(*args, **kwargs)
       print("itmatou1")

@MyDecorator
def say_hello():
   print("Hello!")

say_hello()

其輸出結(jié)果為:

itmatou
Hello!
itmatou1

內(nèi)置裝飾器

Python 還提供了一些內(nèi)置的裝飾器,如 @staticmethod、@classmethod 等,用于修飾靜態(tài)方法和類方法。

class MyClass:
   @staticmethod
   def static_method():
       print("Static method.")

   @classmethod
   def class_method(cls):
       print("Class method.")

MyClass.static_method()
MyClass.class_method()

這只是裝飾器的基礎(chǔ),你可以根據(jù)需要使用裝飾器來實現(xiàn)各種功能,比如性能分析、日志記錄、權(quán)限檢查等。裝飾器是 Python 中非常強大和靈活的工具

以上就是python裝飾器"@"使用實例深入探究的詳細內(nèi)容,更多關(guān)于python裝飾器@的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Scrapy爬蟲框架集成selenium及全面詳細講解

    Scrapy爬蟲框架集成selenium及全面詳細講解

    這篇文章主要為大家介紹了Scrapy集成selenium,以及scarpy爬蟲框架全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • 淺析Python實現(xiàn)DFA算法

    淺析Python實現(xiàn)DFA算法

    DFA全稱為Deterministic Finite Automaton,即確定有窮自動機。特征:有一個有限狀態(tài)集合和一些從一個狀態(tài)通向另一個狀態(tài)的邊,每條邊標記有一個符號,其中一個狀態(tài)是初態(tài),某些狀態(tài)是終態(tài)。不同于不確定的有限自動機,DFA中不會有從同一狀態(tài)出發(fā)的兩條邊標志有相同的符號
    2021-06-06
  • python基礎(chǔ)之函數(shù)的定義和調(diào)用

    python基礎(chǔ)之函數(shù)的定義和調(diào)用

    這篇文章主要介紹了python函數(shù)的定義和調(diào)用,實例分析了Python中返回一個返回值與多個返回值的方法,需要的朋友可以參考下
    2021-10-10
  • python中的decorator的作用詳解

    python中的decorator的作用詳解

    這篇文章主要介紹了python中的decorator的作用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 使用Django xadmin 實現(xiàn)修改時間選擇器為不可輸入狀態(tài)

    使用Django xadmin 實現(xiàn)修改時間選擇器為不可輸入狀態(tài)

    這篇文章主要介紹了使用Django xadmin 實現(xiàn)修改時間選擇器為不可輸入狀態(tài),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Pygame如何使用精靈和碰撞檢測

    Pygame如何使用精靈和碰撞檢測

    本文主要介紹了Pygame如何使用精靈和碰撞檢測,它們能夠幫助我們跟蹤屏幕上移動的大量圖像。我們還會了解如何檢測兩個圖像相互重疊或者碰撞的方法。
    2021-11-11
  • python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN

    python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN

    這篇文章主要為大家介紹了python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 如何通過神經(jīng)網(wǎng)絡(luò)實現(xiàn)線性回歸的擬合

    如何通過神經(jīng)網(wǎng)絡(luò)實現(xiàn)線性回歸的擬合

    這篇文章主要介紹了如何通過神經(jīng)網(wǎng)絡(luò)實現(xiàn)線性回歸的擬合問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 如何用Python中19行代碼把照片寫入到Excel中

    如何用Python中19行代碼把照片寫入到Excel中

    這篇文章主要介紹了如何利用Python3中的19行代碼把照片寫入到Excel中,文章內(nèi)容實現(xiàn)的不是截取一張圖片,粘貼到excel,而是通過像素寫入到excel中,需要的朋友可以參考一下
    2022-02-02
  • python3實現(xiàn)名片管理系統(tǒng)

    python3實現(xiàn)名片管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python3實現(xiàn)名片管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11

最新評論