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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python使用multiprocessing模塊實現(xiàn)帶回調(diào)函數(shù)的異步調(diào)用方法
這篇文章主要介紹了python使用multiprocessing模塊實現(xiàn)帶回調(diào)函數(shù)的異步調(diào)用方法,實例分析了multiprocessing模塊異步調(diào)用的相關(guān)使用技巧,需要的朋友可以參考下2015-04-04
Python實現(xiàn)批量導入1000條xlsx數(shù)據(jù)
本文主要介紹了Python實現(xiàn)批量導入1000條xlsx數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02
Python中使用第三方庫xlutils來追加寫入Excel文件示例
這篇文章主要介紹了Python中使用第三方庫xlutils來追加寫入Excel文件示例,本文直接給出追加寫入示例和追加效果,需要的朋友可以參考下2015-04-04
實例講解Python中SocketServer模塊處理網(wǎng)絡(luò)請求的用法
SocketServer模塊中帶有很多實現(xiàn)服務器所能夠用到的socket類和操作方法,下面我們就來以實例講解Python中SocketServer模塊處理網(wǎng)絡(luò)請求的用法:2016-06-06
輕松掌握python的dataclass讓你的代碼更簡潔優(yōu)雅
本文總結(jié)了幾個我在使用Python的dataclass時常用的技巧,dataclass裝飾器可以幫助我們簡化數(shù)據(jù)類的定義過程,包括設(shè)置默認值、隱藏敏感信息、設(shè)置只讀對象以及將其轉(zhuǎn)化為元組和字典,通過使用dataclass,我們可以更高效地進行數(shù)據(jù)分析和處理,感興趣的朋友跟隨小編一起看看吧2025-01-01

