chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(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)載。文章觀點(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

    文章

    4381

    瀏覽量

    64865
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

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

    關(guān)注

    0

    文章

    8

    瀏覽量

    3389
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    零基礎(chǔ)入門(mén):如何在樹(shù)莓派上編寫(xiě)和運(yùn)行Python程序?

    在這篇文章中,我將為你簡(jiǎn)要介紹Python程序是什么、Python程序可以用來(lái)做什么,以及如何在RaspberryPi上編寫(xiě)和運(yùn)行一個(gè)簡(jiǎn)單的Python程序。什么是Python程序?
    的頭像 發(fā)表于 03-25 09:27 ?731次閱讀
    零基礎(chǔ)入門(mén):如何在樹(shù)莓派上編寫(xiě)和運(yùn)行<b class='flag-5'>Python</b>程序?

    是否可以使用OpenVINO?部署管理在部署機(jī)器上運(yùn)行Python應(yīng)用程序?

    使用 OpenVINO?部署管理創(chuàng)建運(yùn)行時(shí)軟件包。 將運(yùn)行時(shí)包轉(zhuǎn)移到部署機(jī)器中。 無(wú)法確定是否可以在部署機(jī)器上運(yùn)行 Python 應(yīng)用程序,而無(wú)需安裝OpenVINO? Toolkit 和 Python。
    發(fā)表于 03-05 08:16

    Python繪圖Matplotlib快速參考手冊(cè)

    ?PYTHON
    發(fā)表于 02-07 14:04 ?0次下載

    Python Connector for InterBase連接解決方案

    適用于 InterBase 的 Python 連接 Python Connector for InterBase 是一種可靠的連接解決方案,用于從 Python 應(yīng)用程序訪問(wèn) Int
    的頭像 發(fā)表于 01-22 14:34 ?453次閱讀

    使用Python實(shí)現(xiàn)xgboost教程

    使用Python實(shí)現(xiàn)XGBoost模型通常涉及以下幾個(gè)步驟:數(shù)據(jù)準(zhǔn)備、模型訓(xùn)練、模型評(píng)估和模型預(yù)測(cè)。以下是一個(gè)詳細(xì)的教程,指導(dǎo)你如何在Python中使用XGBoost。 1. 安裝XGBoost
    的頭像 發(fā)表于 01-19 11:21 ?1374次閱讀

    適用于MySQL和MariaDB的Python連接:可靠的MySQL數(shù)據(jù)連接和數(shù)據(jù)庫(kù)

    適用于 MySQL 和 MariaDB 的 Python 連接 Python Connector for MySQL 是一種可靠的連接解決方案,用于從 Python 應(yīng)用程序訪問(wèn) M
    的頭像 發(fā)表于 01-17 12:18 ?493次閱讀
    適用于MySQL和MariaDB的<b class='flag-5'>Python</b>連接<b class='flag-5'>器</b>:可靠的MySQL數(shù)據(jù)連接<b class='flag-5'>器</b>和數(shù)據(jù)庫(kù)

    適用于Oracle的Python連接:可訪問(wèn)托管以及非托管的數(shù)據(jù)庫(kù)

    適用于 Oracle 的 Python 連接 適用于 Oracle 的 Python 連接是一種可靠的連接解決方案,用于從 Python
    的頭像 發(fā)表于 01-14 10:30 ?472次閱讀

    Python中代理服務(wù)的配置與應(yīng)用

    在網(wǎng)絡(luò)通信中,代理服務(wù)作為一種重要的網(wǎng)絡(luò)中間件,充當(dāng)著客戶(hù)端和目標(biāo)服務(wù)之間的中間人角色。它能夠接收來(lái)自客戶(hù)端的請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)服務(wù),然后將服務(wù)的響應(yīng)返回給客戶(hù)端。
    的頭像 發(fā)表于 11-12 07:13 ?563次閱讀

    使用Python進(jìn)行圖像處理

    下面是一個(gè)關(guān)于使用Python在幾行代碼中分析城市輪廓線的快速教程。
    的頭像 發(fā)表于 11-07 10:14 ?586次閱讀
    使用<b class='flag-5'>Python</b>進(jìn)行圖像處理

    使用Python構(gòu)建高效的HTTP代理服務(wù)

    構(gòu)建一個(gè)高效的HTTP代理服務(wù)Python中涉及多個(gè)方面,包括性能優(yōu)化、并發(fā)處理、協(xié)議支持(HTTP/HTTPS)、錯(cuò)誤處理以及日志記錄等。
    的頭像 發(fā)表于 10-23 07:41 ?539次閱讀

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

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

    pytorch和python的關(guān)系是什么

    在當(dāng)今的人工智能領(lǐng)域,Python已經(jīng)成為了最受歡迎的編程語(yǔ)言之一。Python的易學(xué)易用、豐富的庫(kù)和框架以及強(qiáng)大的社區(qū)支持,使其成為了數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域的首選語(yǔ)言。而在深度學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 08-01 15:27 ?3282次閱讀

    Python建模算法與應(yīng)用

    Python作為一種功能強(qiáng)大、免費(fèi)、開(kāi)源且面向?qū)ο蟮木幊陶Z(yǔ)言,在科學(xué)計(jì)算、數(shù)學(xué)建模、數(shù)據(jù)分析等領(lǐng)域展現(xiàn)出了卓越的性能。其簡(jiǎn)潔的語(yǔ)法、對(duì)動(dòng)態(tài)輸入的支持以及解釋性語(yǔ)言的本質(zhì),使得Python在多個(gè)平臺(tái)
    的頭像 發(fā)表于 07-24 10:41 ?1261次閱讀

    Python在AI中的應(yīng)用實(shí)例

    Python在人工智能(AI)領(lǐng)域的應(yīng)用極為廣泛且深入,從基礎(chǔ)的數(shù)據(jù)處理、模型訓(xùn)練到高級(jí)的應(yīng)用部署,Python都扮演著至關(guān)重要的角色。以下將詳細(xì)探討Python在AI中的幾個(gè)關(guān)鍵應(yīng)用實(shí)例,包括機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、自然語(yǔ)言處理、
    的頭像 發(fā)表于 07-19 17:16 ?2700次閱讀

    如何實(shí)現(xiàn)Python復(fù)制文件操作

    Python 中有許多“開(kāi)蓋即食”的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,你將會(huì)看到一些用 Python 實(shí)現(xiàn)文件復(fù)制的特殊方法。下面我們開(kāi)始學(xué)習(xí)這九種不同的方法來(lái)實(shí)現(xiàn) Pyt
    的頭像 發(fā)表于 07-18 14:53 ?805次閱讀