一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

Python:裝飾器的原理和案例

如意 ? 來源:百家號 ? 作者: 人工智能研究院 ? 2020-07-01 11:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Python中的裝飾器用于擴展可調(diào)用對象的功能,而無需修改其結(jié)構(gòu)?;旧希b飾器函數(shù)包裝另一個函數(shù)以增強或修改其行為。我們可以通過一個具體的例子了解基礎(chǔ)知識!讓我們編寫一個包含裝飾器實現(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)有助于我們在調(diào)用目標(biāo)函數(shù)之前和之后在控制臺上顯示一些注釋。

以下是定義裝飾器的簡單步驟;

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

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

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

包裝函數(shù)應(yīng)包含目標(biāo)函數(shù)調(diào)用以及擴展目標(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提供的語法糖,我們可以簡化裝飾器的定義,如上所示。

請注意,@ decorator_func_logger僅在我們要裝飾的目標(biāo)函數(shù)之前添加。然后,我們可以直接調(diào)用目標(biāo)函數(shù)。就像我們在第一個實例中所做的那樣,無需顯式分配裝飾器。

定義多個裝飾器并使用參數(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’)

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

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

重要要點

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

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

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

    關(guān)注

    3

    文章

    4379

    瀏覽量

    64803
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

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

    關(guān)注

    0

    文章

    8

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Python繪圖Matplotlib快速參考手冊

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

    Python Connector for InterBase連接解決方案

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

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

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

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

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

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

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

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

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

    使用Python進行圖像處理

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

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

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

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

    今天我們來聊聊一種能給你的代碼變得“加料”的神器——Python裝飾。就像一杯咖啡,原本它是苦的,為了讓它符合我的口味,我給它添加了糖,添加之后就完美的符合了我的口味。那么,裝飾
    的頭像 發(fā)表于 09-20 16:54 ?793次閱讀
    【每天學(xué)點AI】一個例子帶你了解<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)成為了最受歡迎的編程語言之一。Python的易學(xué)易用、豐富的庫和框架以及強大的社區(qū)支持,使其成為了數(shù)據(jù)科學(xué)、機器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域的首選語言。而在深度學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 08-01 15:27 ?3265次閱讀

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

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

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

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

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

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

    Python中變量在內(nèi)存中的存儲方式

    類方法使用@classmethod裝飾定義,它們的第一個參數(shù)通常命名為cls,代表類本身。
    的頭像 發(fā)表于 07-16 16:29 ?523次閱讀

    opencv-python和opencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學(xué)習(xí)軟件庫,它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發(fā)表于 07-16 10:38 ?2075次閱讀