python如何為被裝飾的函數(shù)保留元數(shù)據(jù)
本文實(shí)例為大家分享了python為被裝飾的函數(shù)保留元數(shù)據(jù)的具體代碼,供大家參考,具體內(nèi)容如下
案例:
在函數(shù)對(duì)象中保存著一些函數(shù)的元數(shù)據(jù),如:
f.__name__ 函數(shù)名
f.__doc__ 函數(shù)文檔
f.__moudle__ 函數(shù)所屬模塊名
f.__dict__ 屬性字典
f.__defaults__ 默認(rèn)參數(shù)組
……
在使用裝飾器后,在裝飾器里訪問以上屬性時(shí),我們看到的是裝飾器函數(shù)的元數(shù)據(jù)
需求:
實(shí)現(xiàn)在裝飾器函數(shù)中,保留 被裝飾函數(shù) 的元數(shù)據(jù)
如何實(shí)現(xiàn)?
通過 functools中的wraps, update_wrapper方法實(shí)現(xiàn),每個(gè)都可單獨(dú)實(shí)現(xiàn)
#!/usr/bin/python3 import time from functools import (wraps, update_wrapper, WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES) def count_time(func): """ 給目標(biāo)函數(shù)加上計(jì)算運(yùn)行時(shí)間統(tǒng)計(jì) """ # 這個(gè)裝上器和update_wrapper一樣,默認(rèn)參數(shù)WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES @wraps(func) def wrapper(*args, **kwargs): start_time = time.time() # 定義result接收函數(shù)返回值,并且在裝飾函數(shù)最后返回回去 resutl = func(*args, **kwargs) print('運(yùn)行時(shí)間:', time.time()-start_time) return resutl # 其中默認(rèn)參數(shù) WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES # update_wrapper(wrapper, func) return wrapper @count_time def add(num=100): """ 計(jì)算 0~num 累加值,默認(rèn)num=100 """ time.sleep(1) return sum([x for x in range(num+1)]) if __name__ == '__main__': print('函數(shù)名:', add.__name__) print('屬性字典:', add.__dict__) print('函數(shù)默認(rèn)參數(shù):', add.__defaults__) print('函數(shù)所在模塊:', add.__module__) print('函數(shù)文檔:', add.__doc__) # 打印兩個(gè)默認(rèn)參數(shù) print(WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES) result = add() print(result)
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python辦公自動(dòng)化之文件的比較合并與xml操作
這篇文章主要為大家詳細(xì)介紹了Python辦公自動(dòng)化之文件的比較合并與xml文件操作的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),需要的可以參考一下2023-12-12詳解python如何調(diào)用C/C++底層庫與互相傳值
Python作為一門腳本解釋語言,本身又很好的結(jié)合C++,所以使用Python開發(fā),在性能要求的地方調(diào)用C/C++底層庫,這簡直是神器。本文詳細(xì)介紹了Python調(diào)用C/C++底層庫,互相傳值問題,下面一起來看看。2016-08-08python網(wǎng)絡(luò)編程之多線程同時(shí)接受和發(fā)送
這篇文章主要為大家詳細(xì)介紹了python網(wǎng)絡(luò)編程之多線程同時(shí)接受和發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09提高Python生產(chǎn)力的五個(gè)Jupyter notebook插件
Jupyter Notebook 因其可用性和實(shí)用性而成為數(shù)據(jù)分析和機(jī)器學(xué)習(xí)模型領(lǐng)域最流行的 IDE,它也是很多數(shù)據(jù)初學(xué)者的首選 IDE。它最具特色的是,擁有豐富的插件、擴(kuò)展數(shù)據(jù)處理能力和提升工作效率2021-11-11

Python3 requests文件下載 期間顯示文件信息和下載進(jìn)度代碼實(shí)例