摘要:裝飾器傳參被裝飾的函數(shù)帶有參數(shù)的情況接上一篇,直接上代碼函數(shù)也就是被裝飾的函數(shù)的運(yùn)行時間是裝飾器的正確使用,不需要傳參裝飾器的正確使用,需要傳參此時不用再像上面一樣賦值,可以直接調(diào)用返回值被裝飾的函數(shù)有返回值在裝飾器內(nèi)部需被裝飾函數(shù)的調(diào)用
python 裝飾器 傳參
被裝飾的函數(shù)帶有參數(shù)的情況
接上一篇,直接上代碼
import time def decorator(func): def process(*args, **kwargs): start = time.time() func(*args, **kwargs) end = time.time() print("函數(shù)func(也就是被裝飾的函數(shù))的運(yùn)行時間是:{}".format(end-start)) return process @decorator # python 裝飾器的正確使用,不需要傳參 def decorated(): time.sleep() print("decorated function") @decorator # python 裝飾器的正確使用,需要傳參 def decorated(key, val): time.sleep() print("decorated function") # 此時不用再像上面一樣賦值,可以直接調(diào)用 decorated() decorated(key, val)返回值
被裝飾的函數(shù)有返回值在裝飾器內(nèi)部需return被裝飾函數(shù)的調(diào)用
代碼:
import time def decorator(func): def process(*args, **kwargs): start = time.time() return func(*args, **kwargs) # end = time.time() # print("函數(shù)func(也就是被裝飾的函數(shù))的運(yùn)行時間是:{}".format(end-start)) return process @decorator # python 裝飾器的正確使用,不需要傳參 def decorated(): time.sleep() print("decorated function") return "來自不帶參數(shù)的被裝飾函數(shù)" @decorator # python 裝飾器的正確使用,需要傳參 def decorated(key, val): time.sleep() print("decorated function") return "來自帶有參數(shù)的被裝飾函數(shù)" # 此時不用再像上面一樣賦值,可以直接調(diào)用 decorated() decorated(key, val)裝飾器帶參數(shù)
@decorator(val="")
需要對裝飾期代碼再包裝一層
代碼
import time def warpper(val_type): def decorator(func): def process(*args, **kwargs): start = time.time() return func(*args, **kwargs) return process return decorator @decorator(val_type="") # python 裝飾器的正確使用,不需要傳參 def decorated(): time.sleep() print("decorated function") return "來自不帶參數(shù)的被裝飾函數(shù)" @decorator(val_type="") # python 裝飾器的正確使用,需要傳參 def decorated(key, val): time.sleep() print("decorated function") return "來自帶有參數(shù)的被裝飾函數(shù)" # 此時不用再像上面一樣賦值,可以直接調(diào)用 decorated() decorated(key, val)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43062.html
摘要:裝飾器的使用符合了面向?qū)ο缶幊痰拈_放封閉原則。三簡單的裝飾器基于上面的函數(shù)執(zhí)行時間的需求,我們就手寫一個簡單的裝飾器進(jìn)行實(shí)現(xiàn)。函數(shù)體就是要實(shí)現(xiàn)裝飾器的內(nèi)容。類裝飾器的實(shí)現(xiàn)是調(diào)用了類里面的函數(shù)。類裝飾器的寫法比我們裝飾器函數(shù)的寫法更加簡單。 目錄 前言 一、什么是裝飾器 二、為什么要用裝飾器 ...
摘要:希望引以為戒鄭傳裝飾模式如果你了解,你肯定聽過裝飾器模式。在面向?qū)ο笾?,裝飾模式指動態(tài)地給一個對象添加一些額外的職責(zé)。就增加一些功能來說,裝飾模式比生成子類更為靈活。 漫談 如果作為一個Python入門,不了解Python裝飾器也沒什么,但是如果作為一個中級Python開發(fā)人員,如果再不對python裝飾器熟稔于心的話,那么可能并沒有量變積累到質(zhì)變。 我以前也看過很多講python 裝...
摘要:一般情況下,我們使用裝飾器提供的語法糖,來簡化上面的寫法像上面的情況,可以動態(tài)修改函數(shù)或類功能的函數(shù)就是裝飾器。本文標(biāo)題為會打扮的裝飾器本文鏈接為參考資料修飾器的函數(shù)式編程中的裝飾器介紹思誠之道裝飾器入門與提高賴明星 裝飾器 我們知道,在 Python 中,我們可以像使用變量一樣使用函數(shù): 函數(shù)可以被賦值給其他變量 函數(shù)可以被刪除 可以在函數(shù)里面再定義函數(shù) 函數(shù)可以作為參數(shù)傳遞給另外...
摘要:初步認(rèn)識裝飾器函數(shù)裝飾器用于在源代碼中標(biāo)記函數(shù),以某種方式增強(qiáng)函數(shù)的行為。函數(shù)裝飾器在導(dǎo)入模塊時立即執(zhí)行,而被裝飾的函數(shù)只在明確調(diào)用時運(yùn)行。只有涉及嵌套函數(shù)時才有閉包問題。如果想保留函數(shù)原本的屬性,可以使用標(biāo)準(zhǔn)庫中的裝飾器。 《流暢的Python》筆記本篇將從最簡單的裝飾器開始,逐漸深入到閉包的概念,然后實(shí)現(xiàn)參數(shù)化裝飾器,最后介紹標(biāo)準(zhǔn)庫中常用的裝飾器。 1. 初步認(rèn)識裝飾器 函數(shù)裝飾...
閱讀 3632·2021-11-24 10:22
閱讀 3701·2021-11-22 09:34
閱讀 2502·2021-11-15 11:39
閱讀 1537·2021-10-14 09:42
閱讀 3672·2021-10-08 10:04
閱讀 1565·2019-08-30 15:52
閱讀 858·2019-08-30 13:49
閱讀 3028·2019-08-30 11:21