av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

Python裝飾器如何實(shí)現(xiàn)修復(fù)過程解析

瀏覽:2日期:2022-07-12 10:06:48

Python裝飾器(decorator)在實(shí)現(xiàn)的時(shí)候,被裝飾后的函數(shù)其實(shí)已經(jīng)是另外一個(gè)函數(shù)了(函數(shù)名等函數(shù)屬性會(huì)發(fā)生改變),

為了不影響,Python的functools包中提供了一個(gè)叫wraps的decorator來消除這樣的副作用。寫一個(gè)decorator的時(shí)候,最好在實(shí)現(xiàn)之前加上functools的wrap,

它能保留原有函數(shù)的名稱和docstring。

未加@wraps的時(shí)候:

from functools import wrapsdef wrapper(func): # @wraps(func) def inner(*args, **kwargs): print('裝飾器工作中...') func(*args, **kwargs) return inner@wrapperdef f1(arg): ''' 這是一個(gè)測試裝飾器修復(fù)技術(shù)的函數(shù) :param arg: 隨便傳 :return: 沒有 ''' print(arg)f1(’呵呵’)print(f1.__name__,f1.__doc__)

打印結(jié)果是:

Python裝飾器如何實(shí)現(xiàn)修復(fù)過程解析

但是加上@wraps以后:

from functools import wrapsdef wrapper(func): @wraps(func) def inner(*args, **kwargs): print('裝飾器工作中...') func(*args, **kwargs) return inner@wrapperdef f1(arg): ''' 這是一個(gè)測試裝飾器修復(fù)技術(shù)的函數(shù) :param arg: 隨便傳 :return: 沒有 ''' print(arg)f1(’呵呵’)print(f1.__name__,f1.__doc__)

打印結(jié)果是:

Python裝飾器如何實(shí)現(xiàn)修復(fù)過程解析

其中主要的就是兩個(gè)變量:

1、顯示 正在執(zhí)行的函數(shù)的名稱 f.name

2、顯示 正在執(zhí)行的函數(shù)的注釋 f.doc

簡單來說就是:

如果沒使用@wraps,當(dāng)A調(diào)用了裝飾器B的話,即使A.name,返回的會(huì)是裝飾器B的函數(shù)名稱,而不是A的函數(shù)名稱

如果使用了@wraps,當(dāng)A調(diào)用了裝飾器B的話,A.__ name__返回的會(huì)是A函數(shù)的名稱,而不是飾器B的名稱,

這也即使常說的@wraps是裝飾器的修復(fù)技術(shù),

實(shí)際就是修復(fù)還原了A的__ name__變量,同理__ doc__變量也是一樣。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 草草网 | 亚洲无av在线中文字幕 | 国产在线免费 | 亚洲一区久久 | 亚洲偷偷| 亚洲一区二区在线视频 | 真实人妻互换毛片视频 | 蜜臀久久99精品久久久久宅男 | 伊人精品综合 | a级成人毛片 | 成人在线免费视频 | 欧美日韩中文字幕 | 青青草在线免费视频 | 天天干夜夜欢 | 天天操狠狠干 | 超碰免费人人 | 久久网页| 欧美片网站免费 | a级黄色片 | 中国毛片视频 | 日韩一级大片 | 久久久久久久综合 | 欧美日韩在线播放 | 在线观看一区 | 亚洲精品网站在线观看 | 色综合天天综合网天天狠天天 | 国产在线视频一区二区 | 日本一级淫片色费放 | 韩日精品视频 | 国产欧美日韩一区 | 成人91视频 | 成人区精品一区二区婷婷 | 久久av片 | 免费三级网站 | 成人福利在线 | www.国产精品.com | 不卡的av网站 | 香蕉视频国产 | 91精品国产99久久久久久红楼 | 国产免费成人 | 久久h|