欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python裝飾器"@"使用實(shí)例深入探究

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

基礎(chǔ)語(yǔ)法

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

舉例:

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

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

funB()

其輸出結(jié)果為:

itmatou
Hello!
itmatou2

分析:

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

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

帶參數(shù)的裝飾器

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

舉例:

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

其輸出結(jié)果為:

itmatou: hello

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

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

**kwargs是另一個(gè)特殊的參數(shù),在函數(shù)定義時(shí)以?xún)蓚€(gè)星號(hào)開(kāi)頭,用于傳遞不確定數(shù)量的關(guān)鍵字參數(shù)。作為一個(gè)字典(dict)來(lái)處理。

舉例:

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í)行順序相當(dāng)于:

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

類(lèi)裝飾器

除了函數(shù)裝飾器,你還可以使用類(lèi)作為裝飾器。類(lèi)裝飾器需要實(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)方法和類(lè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ù)需要使用裝飾器來(lái)實(shí)現(xiàn)各種功能,比如性能分析、日志記錄、權(quán)限檢查等。裝飾器是 Python 中非常強(qiáng)大和靈活的工具

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

相關(guān)文章

  • Scrapy爬蟲(chóng)框架集成selenium及全面詳細(xì)講解

    Scrapy爬蟲(chóng)框架集成selenium及全面詳細(xì)講解

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

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

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

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

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

    python中的decorator的作用詳解

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

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

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

    Pygame如何使用精靈和碰撞檢測(cè)

    本文主要介紹了Pygame如何使用精靈和碰撞檢測(cè),它們能夠幫助我們跟蹤屏幕上移動(dòng)的大量圖像。我們還會(huì)了解如何檢測(cè)兩個(gè)圖像相互重疊或者碰撞的方法。
    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,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 如何通過(guò)神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線性回歸的擬合

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

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

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

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

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

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

最新評(píng)論