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)
以上就是本文的全部?jī)?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++底層庫(kù)與互相傳值
Python作為一門腳本解釋語言,本身又很好的結(jié)合C++,所以使用Python開發(fā),在性能要求的地方調(diào)用C/C++底層庫(kù),這簡(jiǎn)直是神器。本文詳細(xì)介紹了Python調(diào)用C/C++底層庫(kù),互相傳值問題,下面一起來看看。2016-08-08
python網(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í)例

