精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

Python:裝飾器的原理和案例

如意 ? 來(lái)源:百家號(hào) ? 作者: 人工智能研究院 ? 2020-07-01 11:35 ? 次閱讀

Python中的裝飾器用于擴(kuò)展可調(diào)用對(duì)象的功能,而無(wú)需修改其結(jié)構(gòu)。基本上,裝飾器函數(shù)包裝另一個(gè)函數(shù)以增強(qiáng)或修改其行為。我們可以通過(guò)一個(gè)具體的例子了解基礎(chǔ)知識(shí)!讓我們編寫(xiě)一個(gè)包含裝飾器實(shí)現(xiàn)示例的Python3代碼:

裝飾定義

defdecorator_func_logger(target_func):defwrapper_func():print(“Before calling”, target_func.__name__) target_func() print(“After calling”, target_func.__name__)return wrapper_funcdef target(): print(‘Python is in the decorated target function’)dec_func = decorator_func_logger(target)dec_func()Output:air-MacBook-Air:$ python DecoratorsExample.py(‘Before calling’, ‘target’)Python isin the decorated target function(‘After calling’, ‘target’)

上面的裝飾器結(jié)構(gòu)有助于我們?cè)谡{(diào)用目標(biāo)函數(shù)之前和之后在控制臺(tái)上顯示一些注釋。

以下是定義裝飾器的簡(jiǎn)單步驟;

首先,我們應(yīng)該定義一個(gè)可調(diào)用對(duì)象,例如裝飾器函數(shù),其中還包含一個(gè)包裝器函數(shù)。

裝飾器函數(shù)應(yīng)將目標(biāo)函數(shù)作為參數(shù)

并且它應(yīng)該返回包裝函數(shù),該包裝函數(shù)擴(kuò)展了作為參數(shù)傳遞的目標(biāo)函數(shù)。

包裝函數(shù)應(yīng)包含目標(biāo)函數(shù)調(diào)用以及擴(kuò)展目標(biāo)函數(shù)行為的代碼。

defdecorator_func_logger(target_func):defwrapper_func(): print(“Before calling”, target_func.__name__) target_func() print(“After calling”, target_func.__name__)return wrapper_func@decorator_func_loggerdef target():print(‘Python is in the decorated target function’)target()Output:air-MacBook-Air:$ python DecoratorsExample.py(‘Before calling’, ‘target’)Python isin the decorated target function(‘After calling’, ‘target’)

借助Python提供的語(yǔ)法糖,我們可以簡(jiǎn)化裝飾器的定義,如上所示。

請(qǐng)注意,@ decorator_func_logger僅在我們要裝飾的目標(biāo)函數(shù)之前添加。然后,我們可以直接調(diào)用目標(biāo)函數(shù)。就像我們?cè)诘谝粋€(gè)實(shí)例中所做的那樣,無(wú)需顯式分配裝飾器。

定義多個(gè)裝飾器并使用參數(shù)裝飾函數(shù)

import timedef decorator_func_logger(target_func):defwrapper_func(*args, **kwargs):print(“Before calling”, target_func.__name__) target_func(*args, **kwargs)print(“After calling”, target_func.__name__)return wrapper_funcdef decorator_func_timeit(target_func):defwrapper_func(*args, **kwargs): ts = time.time() target_func(*args, **kwargs) te = time.time()print (target_func.__name__, (te - ts) * 1000)return wrapper_func@decorator_func_logger@decorator_func_timeitdef target(loop): count = 0 print(‘Python is in the decorated target function’)for number in range(loop): count += numbertarget(100)target(3000)Output:air-MacBook-Air:$ python DecoratorsExample.py(‘Before calling’, ‘wrapper_func’)Python isin the decorated target function(‘target’, 0.015974044799804688)(‘After calling’, ‘wrapper_func’)(‘Before calling’, ‘wrapper_func’)Python isin the decorated target function(‘target’, 0.47397613525390625)(‘After calling’, ‘wrapper_func’)

通過(guò)使用‘@’語(yǔ)法在目標(biāo)函數(shù)之前添加多個(gè)裝飾器,可以輕松地用多個(gè)裝飾器裝飾目標(biāo)函數(shù)。裝飾器的執(zhí)行順序?qū)⑴c在目標(biāo)函數(shù)之前列出的順序相同。

請(qǐng)注意,我們的目標(biāo)函數(shù)中有一個(gè)參數(shù)loop。只要包裝函數(shù)使用相同的參數(shù),就沒(méi)有問(wèn)題。為了確保裝飾器可以靈活地接受任意數(shù)量的參數(shù),將(* args,** kwargs)參數(shù)用于包裝函數(shù)。

重要要點(diǎn)

裝飾器定義可重用的代碼塊,您可以將這些代碼塊應(yīng)用于可調(diào)用對(duì)象(函數(shù),方法,類(lèi),對(duì)象),以修改或擴(kuò)展其行為,而無(wú)需修改對(duì)象本身。

請(qǐng)考慮您的腳本中有許多函數(shù)執(zhí)行許多不同的任務(wù),并且需要向所有函數(shù)添加特定的行為。在這種情況下,將相同的代碼塊復(fù)制到函數(shù)中以具有所需的功能不是一個(gè)好的解決方案。您可以簡(jiǎn)單地裝飾函數(shù)。

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

    關(guān)注

    3

    文章

    4307

    瀏覽量

    62432
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4782

    瀏覽量

    84456
  • 調(diào)用
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    3216
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    今天我們來(lái)聊聊一種能給你的代碼變得“加料”的神器——Python裝飾。就像一杯咖啡,原本它是苦的,為了讓它符合我的口味,我給它添加了糖,添加之后就完美的符合了我的口味。那么,裝飾
    的頭像 發(fā)表于 09-20 16:54 ?524次閱讀
    【每天學(xué)點(diǎn)AI】一個(gè)例子帶你了解<b class='flag-5'>Python</b><b class='flag-5'>裝飾</b><b class='flag-5'>器</b>到底在干嘛!

    鴻蒙OS開(kāi)發(fā)實(shí)例:【ArkTS類(lèi)庫(kù)多線(xiàn)程@Concurrent裝飾校驗(yàn)并發(fā)函數(shù)】

    在使用TaskPool時(shí),執(zhí)行的并發(fā)函數(shù)需要使用該裝飾修飾,否則無(wú)法通過(guò)相關(guān)校驗(yàn)。從API version 9開(kāi)始,該裝飾支持在ArkTS卡片中使用。
    的頭像 發(fā)表于 04-02 14:45 ?595次閱讀
    鴻蒙OS開(kāi)發(fā)實(shí)例:【ArkTS類(lèi)庫(kù)多線(xiàn)程@Concurrent<b class='flag-5'>裝飾</b><b class='flag-5'>器</b>校驗(yàn)并發(fā)函數(shù)】

    鴻蒙OS開(kāi)發(fā)實(shí)例:【裝飾@Observed@ObjectLink】

    加深對(duì)@Observed@ObjectLink 裝飾器使用的理解,以小故事做注釋
    的頭像 發(fā)表于 03-28 17:05 ?952次閱讀
    鴻蒙OS開(kāi)發(fā)實(shí)例:【<b class='flag-5'>裝飾</b><b class='flag-5'>器</b>@Observed@ObjectLink】

    鴻蒙原生應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言基礎(chǔ)類(lèi)庫(kù)多線(xiàn)程@Concurrent裝飾校驗(yàn)并發(fā)函數(shù)

    在使用TaskPool時(shí),執(zhí)行的并發(fā)函數(shù)需要使用該裝飾修飾,否則無(wú)法通過(guò)相關(guān)校驗(yàn)。從API version 9開(kāi)始,該裝飾支持在ArkTS卡片中使用。
    發(fā)表于 03-18 10:30

    OpenHarmony父子組件單項(xiàng)同步使用:@Prop裝飾

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

    OpenHarmony 定義擴(kuò)展組件樣式:@Extend 裝飾

    說(shuō)明: 從 API version 9 開(kāi)始,該裝飾支持在 ArkTS 卡片中使用。 裝飾器使用說(shuō)明 語(yǔ)法 ? @Extend(UIComponentName) function
    的頭像 發(fā)表于 02-01 20:53 ?257次閱讀

    如何使用linux下gdb來(lái)調(diào)試python程序

    如何使用linux下gdb來(lái)調(diào)試python程序? 在Linux下,可以使用GDB(GNU調(diào)試)來(lái)調(diào)試Python程序。GDB是一個(gè)強(qiáng)大的調(diào)試工具,可以幫助開(kāi)發(fā)者診斷和修復(fù)程序中的錯(cuò)誤。在本文
    的頭像 發(fā)表于 01-31 10:41 ?2422次閱讀

    python運(yùn)行環(huán)境的安裝和配置

    Python是一種非常流行的編程語(yǔ)言,廣泛應(yīng)用于科學(xué)計(jì)算、Web開(kāi)發(fā)、人工智能等領(lǐng)域。為了能夠正常運(yùn)行Python程序,我們需要先安裝和配置Python運(yùn)行環(huán)境。本文將為您詳盡介紹Python
    的頭像 發(fā)表于 11-29 16:17 ?1104次閱讀

    Python運(yùn)行環(huán)境有哪些

    Python是一種廣泛使用的高級(jí)編程語(yǔ)言,它有許多種運(yùn)行環(huán)境,可以適應(yīng)不同的開(kāi)發(fā)需求。下面將詳細(xì)介紹Python的幾種常見(jiàn)的運(yùn)行環(huán)境。 CPython: CPython是Python的默認(rèn)解釋
    的頭像 發(fā)表于 11-29 16:14 ?1913次閱讀

    python軟件對(duì)電腦配置要求

    Python是一種流行的編程語(yǔ)言,它在許多不同的領(lǐng)域中被廣泛使用,例如網(wǎng)站開(kāi)發(fā)、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)等。對(duì)于使用Python的開(kāi)發(fā)者來(lái)說(shuō),了解Python軟件的電腦配置要求是非常重要的。本文將詳細(xì)介紹
    的頭像 發(fā)表于 11-29 14:58 ?9776次閱讀

    查看python安裝路徑的方法

    Python是一種高級(jí)編程語(yǔ)言,常用于開(kāi)發(fā)Web應(yīng)用、數(shù)據(jù)分析、人工智能等領(lǐng)域。在使用Python進(jìn)行開(kāi)發(fā)之前,我們需要先安裝Python解釋,并了解
    的頭像 發(fā)表于 11-29 14:54 ?1.1w次閱讀

    python自帶的idle怎么進(jìn)入

    Python自帶的IDLE是一個(gè)集成開(kāi)發(fā)環(huán)境(Integrated Development Environment),它通過(guò)提供編輯和交互式解釋,使得Python的開(kāi)發(fā)變得更加簡(jiǎn)單
    的頭像 發(fā)表于 11-29 14:51 ?2192次閱讀

    python shell怎么用

    Python Shell是一種交互式解釋,可以通過(guò)命令行直接運(yùn)行Python代碼。在Shell中,可以輸入一行代碼并立即得到結(jié)果,非常適合于測(cè)試、嘗試新代碼或進(jìn)行簡(jiǎn)單的任務(wù)。本文將詳細(xì)介紹
    的頭像 發(fā)表于 11-29 14:36 ?1106次閱讀

    python軟件怎么運(yùn)行代碼

    Python是一種高級(jí)編程語(yǔ)言,它被廣泛用于開(kāi)發(fā)各種類(lèi)型的應(yīng)用程序,從簡(jiǎn)單的腳本到復(fù)雜的網(wǎng)絡(luò)應(yīng)用和機(jī)器學(xué)習(xí)模型。要運(yùn)行Python代碼,您需要一個(gè)Python解釋,它可以將您的代碼翻
    的頭像 發(fā)表于 11-28 16:02 ?862次閱讀

    運(yùn)行Python程序的幾種常見(jiàn)方法

    方法: 使用Python解釋 Python解釋是運(yùn)行Python程序的基本工具。在命令行中輸入 py
    的頭像 發(fā)表于 11-28 15:32 ?2443次閱讀