中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python的裝飾器怎么用

發布時間:2022-01-13 09:34:25 來源:億速云 閱讀:160 作者:iii 欄目:大數據

這篇文章主要講解了“python的裝飾器怎么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python的裝飾器怎么用”吧!

1、實現a+b的功能

def A(a, b):    print(a + b)    return a + bif __name__ == "__main__":    A(1, 2)

2、現在我想函數A不變的情況下,實現a+2+b*2的功能  -- 函數帶參數或者參數數量不確定

def B(fun):    def C(*args):        a = args[0]+2        b = args[1]*2        return fun(a,b)    return C@Bdef A(a, b):    print(a + b)    return a + bif __name__ == "__main__":    A(1, 2)   輸出結果:7

(1)在main函數運行A(1,2)時,先進入裝飾器B中,并將a/b參數傳給*args(這里args可表示不限數量的變量輸入);在對參數a/b進行修改后,最后進入A函數進行 計算。

(2)函數B的入參是 fun,函數C的入參是 args,對應的實際值即為A(),(a,b)

3、在添加裝飾器后,又想繼續使用原函數功能 -- 裝飾器帶參數

def D(flag):    def B(fun):        def C(*args):            if flag:                a = args[0]+2                b = args[1]*2                return fun(a, b)            else:                return fun(*args)        return C    return B
@D(flag=False)def A(a, b):    print(a + b)    return a + b

if __name__ == "__main__":    A(1, 2)
輸出結果:3

通過flag字段的判斷,可以實現A()原功能或者A的增加功能。

這里要注意下,在原裝飾器B函數外面又加了一層函數D,為 了加深印象,可 以這樣理解:

D是為 了flag參數的,B是為了A()的,C是為了a/b參數的。對應的順序是基于flag/A/ab的上下文決定。

4、在寫完函數D后,發現又想 加新功能,怎么辦? -- 裝飾器疊羅漢。

# coding=utf-8# @Auther : "鵬哥賊優秀"# @Date : 2019/10/24# @Software : PyCharmdef D(flag):    def B(fun):        def C(*args):            print("我是D 裝飾器")            print("當前輸入值內容變為:", *args)            if flag:                a = args[0] + 2                b = args[1] * 2                return fun(a, b)            else:                return fun(*args)        return C    return B
def E(fun):    def F(*args):        print("我是E 裝飾器")        print("當前輸入值內容變為:",*args)        a = args[0] + 10        b = args[1] + 10        return fun(a, b)    return F
@D(flag=True)@Edef A(a, b):    print(a + b)    return a + b
if __name__ == "__main__":    A(1, 2)
輸出結果是:我是D 裝飾器當前輸入值內容變為:1 2我是E 裝飾器當前輸入值內容變為:3 427

當出現多個裝飾器,按順序分別進行對應功能的計算,因此根據以上示例代碼,先進行裝飾器D的計算,將a/b變為3/4;然后進入裝飾器E的計算,將a/b變為了13/14,最后進入A()函數,并輸出27。

感謝各位的閱讀,以上就是“python的裝飾器怎么用”的內容了,經過本文的學習后,相信大家對python的裝飾器怎么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安化县| 衡山县| 康平县| 丹寨县| 双城市| 五指山市| 吕梁市| 庆阳市| 始兴县| 大邑县| 云霄县| 尉氏县| 莎车县| 金门县| 北辰区| 建湖县| 崇信县| 寻乌县| 水城县| 仙游县| 大英县| 响水县| 淄博市| 岳阳县| 武汉市| 长宁县| 府谷县| 安塞县| 布尔津县| 稷山县| 新泰市| 邵阳县| 莲花县| 屯昌县| 京山县| 建湖县| 栾城县| 楚雄市| 南召县| 宁河县| 黔江区|