日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python装饰器(二)

發(fā)布時間:2025/3/12 python 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python装饰器(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

想再說一下裝飾器的使用和原理。

之前已經(jīng)說了裝飾器的概念,和語法,這里想再進一步說一下幾個裝飾器的例子。

例子一:

def makBlod(fn):def wrappen():return "<b>" + fn() + "</b>"return wrappendef makItalic(fn):def wrappen():return "<i>" + fn() + "</i>"return wrappen@makBlod def test1():return "hello world - 01"@makItalic def test2():return "hello world - 02"@makBlod @makItalic def test3():return "hello world - 03"print(test1()) print(test2()) print(test3())

首先看到上面的例子的時候,函數(shù) test1和test2的執(zhí)行結(jié)果一看就了然于心,那么test3函數(shù)的執(zhí)行結(jié)果真的是要好好想想解釋器的原理了。先看結(jié)果。

<b>hello world - 01</b> <i>hello world - 02</i> <b><i>hello world - 03</i></b>

那么裝飾器的原理到底是怎么樣呢!比如 test3 這個函數(shù)被兩個裝飾器@makBlod和@makItalic 同時裝飾了。那么在具體說明原理之前先說一下裝飾器在裝飾的時候是從下向上裝飾的,看下面代碼和執(zhí)行結(jié)果。

def makBlod(fn):print("makBlod")def wrappen():return "<b>" + fn() + "</b>"return wrappendef makItalic(fn):print("makItalic")def wrappen():return "<i>" + fn() + "</i>"return wrappen@makBlod @makItalic def test3():return "hello world - 03"print(test3()) makItalic makBlod <b><i>hello world - 03</i></b>

在裝飾器里面加了各加了一行代碼,從代碼的執(zhí)行的結(jié)果可以看出,makItalic裝飾器先執(zhí)行了,然后才是上面makBlod裝飾器執(zhí)行。由此可得出,裝飾器在裝飾的時候是從下向上裝飾的(也就是先@makItelic然后才是@makBlod?)。

第一步:裝飾 @makItali,看粉色的線段,這個時候全局下的變量test3指向了makItalic 函數(shù)里面函數(shù) wrappen 的位置,也就是說此時,全局下的函數(shù)test3在執(zhí)行的時候是執(zhí)行 makItalic 里面的 wrappen函數(shù),wrappen的test3函數(shù)就指向原來test3函數(shù)的指引位置。

第二部:裝飾 @makBlod,看綠色的線段。因為第一步里面test3函數(shù)是 makItalic 里面的wrappen,所以在裝飾的時候,穿進去局部變量函數(shù)test3應(yīng)該是 makItalic 里面的wrappen(看綠色曲線所指引的位置),在makBlod函數(shù)裝飾完成后,全部變量test3所指引的位置應(yīng)該是 makBlod函數(shù)里面的wrappen局部函數(shù)。

上面兩步裝飾器的裝飾工作完成,那么在調(diào)用的時候,test3() 。

1、makBlod函數(shù)里面的wrappen先執(zhí)行。

2、makItalic函數(shù)里面的wrappen載執(zhí)行。

3、最下面那個代碼塊再執(zhí)行(就是原來全局下test3所指引的位置)

這個執(zhí)行完后,return 出來的結(jié)果就構(gòu)成了?<b><i>hello world - 03</i></b> 這樣的結(jié)果。

?

總結(jié)

以上是生活随笔為你收集整理的Python装饰器(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。