0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【每天學(xué)點AI】一個例子帶你了解Python裝飾器到底在干嘛!

華清遠見工控 ? 2024-09-20 16:54 ? 次閱讀

今天我們來聊聊一種能給你的代碼變得“加料”的神器——Python裝飾器。

wKgaombtOEaAGfC5AAAT2kZ9brI20.jpeg

就像一杯咖啡,原本它是苦的,為了讓它符合我的口味,我給它添加了糖,添加之后就完美的符合了我的口味。

那么,裝飾器又是如何給代碼進行“加料”呢?

Python裝飾器提供了一個更為優(yōu)雅的方式來增強現(xiàn)有函數(shù)的行為,并且不需要修改現(xiàn)有的函數(shù)代碼及調(diào)用方式。

接下來通過一個案例來介紹一下裝飾器的原理和實際的行為。

這里有一個函數(shù),他就像一個勤勞的快遞員,每次運行都送一次快遞。

現(xiàn)在我們想知道它每次送快遞需要多長時間,這時候裝飾器就派上用場了,我們可以使用裝飾器來給它添加計時的功能。

wKgZombtOEaANYQJAAI8Tn6EY6E351.png

這是使用語法糖給函數(shù)添加裝飾器的用法。

下面的部分稱為原函數(shù),上面的部分稱裝飾器函數(shù),此時去調(diào)用原函數(shù)時,它除了會執(zhí)行原本的功能外,還會執(zhí)行裝飾器給它添加的計時的功能。

這是裝飾器最常見的寫法,但它是怎么給函數(shù)增加新功能的呢?我們來看去除掉語法糖后裝飾器的本來面目。

wKgaombtOEaAIlraAAH6JFu33BI380.png

如果不使用語法糖,它本質(zhì)上就是裝飾器函數(shù)的一次調(diào)用,特殊的是它會將原函數(shù)作為參數(shù)傳遞給裝飾器函數(shù)。而在裝飾器函數(shù)中,它接收一個函數(shù)作為參數(shù),并且在它的內(nèi)部定義了一個新的函數(shù),最后將新函數(shù)進行返回。在這里我們稱timer decorator為外函數(shù),稱wrapper為內(nèi)函數(shù),而這個func就是原函數(shù)。

外函數(shù)將內(nèi)函數(shù)名稱進行返回并賦值為原函數(shù)的函數(shù)名,下面在調(diào)用原函數(shù)的函數(shù)名時,實際上調(diào)用的是內(nèi)函數(shù)。

wKgZombtOEaAffBSAAJ6ik9mlK4531.png

內(nèi)函數(shù)被執(zhí)行后,首先會記錄當(dāng)前時間,然后調(diào)用func,func是什么?是外函數(shù)的形參,這里可能有人會疑惑,外函數(shù)已經(jīng)執(zhí)行完了,為什么func還會存在呢?

這其實就是裝飾器函數(shù)的立身之本:內(nèi)函數(shù)所使用的外函數(shù)數(shù)據(jù)不會隨著外函數(shù)的調(diào)用而銷毀,所以此時func就指向了原函數(shù),在調(diào)用內(nèi)函數(shù)時,這里的func()可以去執(zhí)行原函數(shù),接著記錄一下時間,最后通過差值得到執(zhí)行函數(shù)所需要的時間。至此,通過裝飾器我們不僅為原函數(shù)添加了新的功能,并且還沒有修改其調(diào)用方式。

而語法糖的存在就是為了省略這一行代碼,由此就形成了我們常見的裝飾器了。

完整視頻鏈接:

https://www.bilibili.com/video/BV1fGHDepExY?t=1.2

wKgZombtOEaAXSlfAAKZ3-dCif803.jpeg


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    29342

    瀏覽量

    267627
  • 人工智能
    +關(guān)注

    關(guān)注

    1789

    文章

    46293

    瀏覽量

    236460
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4756

    瀏覽量

    84283
收藏 人收藏

    評論

    相關(guān)推薦

    每天學(xué)點AI】人工智能大模型評估標(biāo)準(zhǔn)有哪些?

    OpenAI新模型o1號稱編程能力8倍殺GPT-4o,MMLU媲美人類專家,MMLU是什么?評估大模型的標(biāo)準(zhǔn)是什么?相信大家閱讀大模型相關(guān)文檔的時候經(jīng)常會看到MMLU,BBH,GSM8K,MATH
    的頭像 發(fā)表于 10-17 16:49 ?234次閱讀
    【<b class='flag-5'>每天</b><b class='flag-5'>學(xué)點</b><b class='flag-5'>AI</b>】人工智能大模型評估標(biāo)準(zhǔn)有哪些?

    每天學(xué)點AI】五階段帶你了解人工智能大模型發(fā)展史!

    20世紀(jì)50年代NLP的早期研究主要基于規(guī)則的方法,依賴于語言學(xué)專家手工編寫的規(guī)則和詞典。這些規(guī)則通常是關(guān)于語法、語義和句法結(jié)構(gòu)的人工規(guī)則。例如簡單的陳述句通常遵循“主語+謂語+賓語”的結(jié)構(gòu)
    的頭像 發(fā)表于 09-25 16:51 ?349次閱讀
    【<b class='flag-5'>每天</b><b class='flag-5'>學(xué)點</b><b class='flag-5'>AI</b>】五<b class='flag-5'>個</b>階段<b class='flag-5'>帶你</b><b class='flag-5'>了解</b>人工智能大模型發(fā)展史!

    PythonAI中的應(yīng)用實例

    Python人工智能(AI)領(lǐng)域的應(yīng)用極為廣泛且深入,從基礎(chǔ)的數(shù)據(jù)處理、模型訓(xùn)練到高級的應(yīng)用部署,Python都扮演著至關(guān)重要的角色。以下將詳細探討
    的頭像 發(fā)表于 07-19 17:16 ?768次閱讀

    TVS管與穩(wěn)壓二極管,區(qū)別到底在哪里!

    TVS管與穩(wěn)壓二極管,區(qū)別到底在哪里!
    的頭像 發(fā)表于 12-05 14:49 ?726次閱讀
    TVS管與穩(wěn)壓二極管,區(qū)別<b class='flag-5'>到底在</b>哪里!

    python運行次自動再次運行

    使用循環(huán)語句是最簡單的種實現(xiàn)自動運行功能的方法。Python中,可以使用while循環(huán)或for循環(huán)來實現(xiàn)。下面是使用while循環(huán)
    的頭像 發(fā)表于 11-23 15:52 ?1619次閱讀

    python寫完程序之后怎么運行

    Python程序的執(zhí)行流程有更深入的了解。 Python程序的基本結(jié)構(gòu) Python程序是由
    的頭像 發(fā)表于 11-22 11:10 ?898次閱讀

    for循環(huán)的基本例子

    例子:計算從1到10的整數(shù)的總和。在這個例子中,我們需要使用for循環(huán)來重復(fù)執(zhí)行累加操作,將每個整數(shù)加到總和中。 代碼如下所示: int sum = 0; // 初始化總和為0
    的頭像 發(fā)表于 11-22 10:00 ?1889次閱讀

    Python中如何表達復(fù)數(shù)

    Python中,可以使用j或J來表示虛部。 以下是關(guān)于Python中復(fù)數(shù)的詳細介紹: 創(chuàng)建復(fù)數(shù) 要創(chuàng)建復(fù)數(shù),可以直接使用復(fù)數(shù)的實部和虛部來賦值給
    的頭像 發(fā)表于 11-21 16:50 ?1999次閱讀

    python里怎么寫數(shù)的立方

    Python中,我們可以使用運算符和函數(shù)來計算數(shù)的立方。下面我將詳細介紹如何使用這些方法來實現(xiàn)這個功能。 首先,我們可以使用乘法運算符 ** 來計算數(shù)的立方。例如,如果我們有
    的頭像 發(fā)表于 11-21 16:47 ?3060次閱讀

    python中if三條件怎么寫

    確定程序的執(zhí)行路徑。這時,我們可以使用 if-elif-else 結(jié)構(gòu)來處理多個條件。 if-elif-else 結(jié)構(gòu)是被廣泛使用的控制結(jié)構(gòu),許多編程語言中都有類似的實現(xiàn)。它允許我們依次測試多個條件,并根據(jù)條件的真假執(zhí)行相
    的頭像 發(fā)表于 11-21 16:42 ?1111次閱讀

    python輸出list的每一個元素

    使用for循環(huán)來遍歷列表,并輸出其中的每一個元素。接下來,我將詳盡、詳實、細致地介紹Python輸出列表的每一個元素的方法,希望能對你有所幫助。 首先,我們需要明確
    的頭像 發(fā)表于 11-21 16:16 ?1256次閱讀

    python最簡單for循環(huán)例子

    。 Python中,for循環(huán)可以用來遍歷任何可迭代對象,比如列表、元組、字符串等等。我們可以使用for關(guān)鍵字和in關(guān)鍵字來編寫簡單的for循環(huán)。 讓我們來看
    的頭像 發(fā)表于 11-21 14:53 ?860次閱讀

    python如何定義函數(shù)

    、Python3 函數(shù) 函數(shù)是組織好的,可重復(fù)使用的,用來實現(xiàn)單,或相關(guān)聯(lián)功能的代碼段。 函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。你已經(jīng)知道Python提供了許多內(nèi)建函數(shù),比如
    的頭像 發(fā)表于 11-14 11:26 ?651次閱讀

    如何寫簡單的裝飾

    要的是,它讓 Python 中被裝飾裝飾后的方法長得更像裝飾前的方法。 本篇文章不會過多的向你介紹裝飾
    的頭像 發(fā)表于 11-01 09:54 ?442次閱讀
    如何寫<b class='flag-5'>一</b><b class='flag-5'>個</b>簡單的<b class='flag-5'>裝飾</b><b class='flag-5'>器</b>

    Python 自制簡單實用的日志裝飾

    寫代碼的時候,往往會漏掉日志這個關(guān)鍵因素,導(dǎo)致功能在使用的時候出錯卻無法溯源。 其實,只需要寫非常簡單的日志裝飾,我們就能大大提升排
    的頭像 發(fā)表于 10-31 15:05 ?452次閱讀
    <b class='flag-5'>Python</b> 自制簡單實用的日志<b class='flag-5'>裝飾</b><b class='flag-5'>器</b>