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

Python3 requests文件下載 期間顯示文件信息和下載進度代碼實例