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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

【每天學點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í)行后,首先會記錄當前時間,然后調(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)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • AI
    AI
    +關注

    關注

    87

    文章

    30898

    瀏覽量

    269130
  • 人工智能
    +關注

    關注

    1791

    文章

    47282

    瀏覽量

    238534
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84695
收藏 人收藏

    評論

    相關推薦

    帶你了解工業(yè)電腦

    系統(tǒng)。工業(yè)領域,機器視覺、工業(yè)機器人、人工智能(AI)和深度學習等應用都依賴于強大、可靠的工業(yè)電腦,以確保流程平穩(wěn)高效地運行。本文介紹了工業(yè)和商用電腦之間的差異、
    的頭像 發(fā)表于 12-02 15:12 ?120次閱讀
    <b class='flag-5'>一</b>文<b class='flag-5'>帶你</b><b class='flag-5'>了解</b>工業(yè)電腦

    每天學點AI】實戰(zhàn)圖像增強技術人工智能圖像處理中的應用

    圖像增強(ImageEnhancement)是人工智能和計算機視覺中項重要的技術,也是人工智能數(shù)據(jù)集預處理的重要步驟。它旨在提高圖像的質(zhì)量,使其視覺上更加清晰、細節(jié)更豐富。這項
    的頭像 發(fā)表于 11-22 17:14 ?583次閱讀
    【<b class='flag-5'>每天</b><b class='flag-5'>學點</b><b class='flag-5'>AI</b>】實戰(zhàn)圖像增強技術<b class='flag-5'>在</b>人工智能圖像處理中的應用

    每天學點AI】前向傳播、損失函數(shù)、反向傳播

    深度學習的領域中,前向傳播、反向傳播和損失函數(shù)是構(gòu)建和訓練神經(jīng)網(wǎng)絡模型的三核心概念。今天,小編將通過簡單的實例,解釋這三概念,并展
    的頭像 發(fā)表于 11-15 10:32 ?662次閱讀
    【<b class='flag-5'>每天</b><b class='flag-5'>學點</b><b class='flag-5'>AI</b>】前向傳播、損失函數(shù)、反向傳播

    每天學點AI】KNN算法:簡單有效的機器學習分類

    想象下,你正在計劃周末的戶外活動,你可能會問自己幾個問題來決定去哪里:"今天天氣怎么樣?"如果天氣晴朗,你可能會選擇去公園野餐;如果天氣陰沉,你可能會選擇去博物館。這個決策
    的頭像 發(fā)表于 10-31 14:09 ?328次閱讀
    【<b class='flag-5'>每天</b><b class='flag-5'>學點</b><b class='flag-5'>AI</b>】KNN算法:簡單有效的機器學習分類<b class='flag-5'>器</b>

    Python常用函數(shù)大全

    Python 世界里,有些寶藏函數(shù)和模塊,它們可以讓你編程更輕松、代碼更高效。這篇文章將帶你一一認識這些神器,讓你的開發(fā)生活瞬間輕松不少!
    的頭像 發(fā)表于 10-27 17:20 ?254次閱讀

    每天學點AI】人工智能大模型評估標準有哪些?

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

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

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

    GAP!你對AI大模型到底了解多少?

    談到 AI 大模型,你最先想到的是什么?很多人首先關心的還是它的商業(yè)變現(xiàn),而非這些技術術語。AI 大模型訓練是端到端的復雜系統(tǒng)工程,技術門檻很高,需要強大的算力支撐,尤其是參數(shù)量大
    的頭像 發(fā)表于 09-07 09:40 ?680次閱讀

    VCA810的自動增益控制電路,RSSI port口是用來干嘛的???

    我是菜鳥,有比較簡單的問題想問大家,希望大家可以解答。 下面這張圖是從手冊上的,但是有很多地方我不明白。例如下面畫紅色框部分的電路,這是
    發(fā)表于 08-26 06:40

    PythonAI中的應用實例

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

    opencv-python和opencv樣嗎

    是OpenCV的Python語言接口,它允許開發(fā)者使用Python語言來調(diào)用OpenCV庫的功能。 雖然OpenCV和OpenCV-Python
    的頭像 發(fā)表于 07-16 10:38 ?1195次閱讀

    Python人工智能領域的應用

    在當今這個科技日新月異的時代,人工智能(AI)已經(jīng)滲透到我們生活的方方面面,從智能家居到自動駕駛,從智能醫(yī)療到金融風控,無不體現(xiàn)著AI的力量。而在這場技術革命中,
    的頭像 發(fā)表于 07-02 18:20 ?1137次閱讀

    緩沖干嘛

    緩沖干嘛的 緩沖種廣泛應用于電子、電氣、通信、計算機、自動化控制等領域的電子元件。它的作用是電路中起到穩(wěn)定電壓、電流、信號等參數(shù)
    的頭像 發(fā)表于 06-10 16:06 ?4842次閱讀

    OpenHarmony父子組件單項同步使用:@Prop裝飾

    @Prop裝飾的變量可以和父組件建立單向的同步關系。@Prop裝飾的變量是可變的,但是變化不會同步回其父組件。 說明: 從API version 9開始,該裝飾支持
    的頭像 發(fā)表于 02-03 10:57 ?417次閱讀
    OpenHarmony父子組件單項同步使用:@Prop<b class='flag-5'>裝飾</b><b class='flag-5'>器</b>

    如何解決Python爬蟲中文亂碼問題?Python爬蟲中文亂碼的解決方法

    Python爬蟲中文亂碼問題。 、了解字符編碼 解決亂碼問題之前,我們首先需要了解些基本
    的頭像 發(fā)表于 01-12 15:11 ?2405次閱讀