亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

python裝飾器三種裝飾模式的簡(jiǎn)單分析

瀏覽:2日期:2022-07-12 11:23:55

學(xué)設(shè)計(jì)模式中有個(gè)裝飾模式,用java實(shí)現(xiàn)起來(lái)不是很難,但是遠(yuǎn)遠(yuǎn)沒有python簡(jiǎn)單,難怪越來(lái)越火了!

這里就簡(jiǎn)單討論下python的幾種裝飾模式:

一 無(wú)參裝飾器:

# 裝飾器import time # 裝飾器,記錄函數(shù)運(yùn)行時(shí)間def decorator01(fun): def wapper(): stime = time.time() fun() etime = time.time() print('fun run time is {TIME}'.format(TIME=etime - stime)) return wapper # 必須要返回一個(gè)函數(shù)的內(nèi)存地址 # 使用裝飾器裝飾某個(gè)函數(shù),等價(jià)于 test01=decorator01(test01),# 即將test01實(shí)際引用變成wapper函數(shù)內(nèi)存地址,所以執(zhí)行test01實(shí)際是執(zhí)行wapper@decorator01def test01(): time.sleep(2) print('test01 is running') test01() # 不修改代碼和調(diào)用方式,實(shí)現(xiàn)添加記錄時(shí)間功能

二 函數(shù)帶參裝飾器:

# 裝飾器import time # 裝飾器,記錄函數(shù)運(yùn)行時(shí)間def decorator01(fun): def wapper(*args, **kwargs): # 使用非固定參數(shù),無(wú)論參數(shù)是什么,都可以傳遞進(jìn)來(lái) stime = time.time() fun(*args, **kwargs) etime = time.time() print('fun run time is {TIME}'.format(TIME=etime - stime)) return wapper # 必須要返回一個(gè)函數(shù)的內(nèi)存地址 # test01() = wapper(), 所以裝飾器加參數(shù)是給嵌套函數(shù)加參數(shù)@decorator01def test01(args1): time.sleep(2) print('參數(shù)是 {NAME} '.format(NAME=args1)) test01('侯征') # 不修改代碼和調(diào)用方式,實(shí)現(xiàn)添加記錄時(shí)間功能

三 裝飾器本身帶參數(shù)的裝飾器:

# 裝飾器import time # 如果裝飾器有參數(shù),最外層是裝飾器的參數(shù)def decorator01(*args, **kwargs): print('裝飾器參數(shù):', *args, **kwargs) def out(fun): #第二層才是接受的函數(shù) def wapper(*args, **kwargs): # 使用非固定參數(shù),無(wú)論參數(shù)是什么,都可以傳遞進(jìn)來(lái) stime = time.time() fun(*args, **kwargs) etime = time.time() print('fun run time is {TIME}'.format(TIME=etime - stime)) return wapper # 必須要返回一個(gè)函數(shù)的內(nèi)存地址 return out # 要返回裝飾函數(shù)的內(nèi)存地址 # 裝飾器本身帶參數(shù),此時(shí) decorator01(arg)=out,即相當(dāng)于 @out裝飾test01,所以 test01=out(fun)=wapper@decorator01(1)def test01(args1): time.sleep(2) print('參數(shù)是 {NAME} '.format(NAME=args1)) test01('侯征') # 不修改代碼和調(diào)用方式,實(shí)現(xiàn)添加記錄時(shí)間功能

這種一開始挺難理解的,但是只要記住一點(diǎn),@語(yǔ)法糖裝飾器的作用就是 給被裝飾的函數(shù)重新賦一個(gè)函數(shù)的內(nèi)存地址,即裝飾器內(nèi)部定義的那個(gè)

和你直接fun01=decorator(fun),然后 fun01()是一樣的,只是這樣寫不用改變?cè)瓉?lái)調(diào)用方式

@decorator

def fun():

即就是 fun=decorator(fun) 所以,當(dāng)裝飾器有參數(shù)時(shí),還需要返回一個(gè)函數(shù),這個(gè)函數(shù)才是用來(lái)裝飾作用的, decorator(1)=out, 即 fun=out(fun) !!

所以外面再包一層就行了,其實(shí)就相當(dāng)于@decorator(1)=@out,即 decorator(1)=out ,實(shí)際裝飾器時(shí)out,只不過(guò)decorator(1)返回了一個(gè)out 這樣理解就簡(jiǎn)單多了 ,無(wú)參的@就是起賦值作用

以上就是python裝飾器三種裝飾模式的簡(jiǎn)單分析的詳細(xì)內(nèi)容,更多關(guān)于python 裝飾模式的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 一级毛片日韩a欧美最爱 | 久久久亚洲精品蜜桃臀 | 久久亚洲美女久久久久 | 成人午夜网 | 亚洲精品一区二区深夜福利 | 午夜性刺激免费视频 | 国产高清在线a视频大全凹凸 | 上海麻豆文化传媒网站入口 | 大学生一级毛片高清版 | 久久久久久亚洲精品 | 欧美一区二区三区在线观看不卡 | 精品夜夜春夜夜爽久久 | 久久aaa | 国产综合精品 | 久久久久久久综合狠狠综合 | 韩日在线 | 免费的日本一级淫篇小说 | 涩涩视频www在线观看入口 | 日韩经典在线 | 国产成人毛片视频不卡在线 | 国产日韩精品一区二区在线观看播放 | 黄色网址播放 | 一区免费视频 | 91视频免费看 | 99这里有精品 | 在线免费观看黄色 | 黄色录像在线免费观看 | 国外成人免费高清激情视频 | 国产视频日本 | 欧美一欧美一区二三区性 | 999国产精品视频 | 亚洲欧美一区二区三区四区 | 国产色播 | 上海麻豆文化传媒网站入口 | 久久91亚洲精品久久91综合 | xx中文字幕乱偷avxx | 国产综合成人久久大片91 | 亚洲精品中文一区不卡 | japanesexxxx护士| 日本一级特黄a大片 | 国产精品三级在线 |