成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python裝飾器的寫法有哪些-創(chuàng)新互聯(lián)

python裝飾器的寫法有哪些?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

成都創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、定陶網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為定陶等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

裝飾器的示例代碼

# 定義裝飾器
def decorator(func):
    def inner():
        # 在內(nèi)部函數(shù)里面對已有函數(shù)進(jìn)行裝飾
        print('已添加登錄認(rèn)證')
        func()
 
    return inner
 
 
def comment():
    print('發(fā)表評論')
 
 
# 調(diào)用裝飾器對已有函數(shù)進(jìn)行裝飾,左邊的comment=inner
comment = decorator(comment)
 
# 調(diào)用方式不變
comment()

裝飾器的語法糖寫法

如果有多個函數(shù)都需要添加登錄驗證的功能,每次都需要編寫func = decorator(func)這樣代碼對已有函數(shù)進(jìn)行裝飾,這種做法還是比較麻煩。

Python給提供了一個裝飾函數(shù)更加簡單的寫法,那就是語法糖,語法糖的書寫格式是: @裝飾器名字,通過語法糖的方式也可以完成對已有函數(shù)的裝飾。

# 定義裝飾器
def decorator(func):
    def inner():
        # 在內(nèi)部函數(shù)里面對已有函數(shù)進(jìn)行裝飾
        print('已添加登錄認(rèn)證')
        func()
 
    return inner
 
 
@decorator  # comment = decorator(comment) 裝飾器語法糖對該代碼進(jìn)行了封裝 左邊comment=inner
def comment():
    print('發(fā)表評論')
 
 
# 調(diào)用方式不變
comment()

裝飾器的執(zhí)行時機(jī)

當(dāng)前模塊加載完成以后,裝飾器會立即執(zhí)行,對已有函數(shù)進(jìn)行裝飾。

# 定義裝飾器
def decorator(func):
    print('裝飾器執(zhí)行了')
 
    def inner():
        # 在內(nèi)部函數(shù)里面對已有函數(shù)進(jìn)行裝飾
        print('已添加登錄認(rèn)證')
        func()
 
    return inner
 
 
@decorator  # comment = decorator(comment) 裝飾器語法糖對該代碼進(jìn)行了封裝 左邊comment=inner
def comment():
print('發(fā)表評論')

運行結(jié)果

裝飾器執(zhí)行了

1

裝飾器實現(xiàn)已有函數(shù)執(zhí)行時間的統(tǒng)計

import time
 
 
def decorator(func):
    def inner():
        # 獲取時間距離1970-1-1 0:0:1的時間差
        begin = time.time()
        func()
        end = time.time()
        result = end - begin
        print(f'函數(shù)執(zhí)行完成耗時:{result}')
 
    return inner
 
 
@decorator
def work():
    for i in range(10000):
        print(i)
 
 
work()

 裝飾帶有參數(shù)的函數(shù)

def decorator(func):
    def inner(num1, num2):
        print('正在努力執(zhí)行加法計算')
        func(num1, num2)
 
    return inner
 
 
@decorator
def add_num(num1, num2):
    result = num1 + num2
    print(f'結(jié)果為:{result}')
 
 
add_num(1, 2)

 裝飾帶有參數(shù)、返回值的函數(shù)

def decorator(func):
    def inner(num1, num2):
        print('正在努力執(zhí)行加法計算')
        num = func(num1, num2)
        return num
 
    return inner
 
 
@decorator
def add_num(num1, num2):
    result = num1 + num2
    return result
 
 
result = add_num(1, 2)
print(f'結(jié)果為:{result}')

類裝飾器的使用

class MyDecorator(object):
    def __init__(self, func):
        self.__func = func
 
    # 實現(xiàn)__call__方法,表示對象是一個可調(diào)用對象,可以像調(diào)用函數(shù)一樣進(jìn)行調(diào)用
    def __call__(self, *args, **kwargs):
        # 對已有函數(shù)進(jìn)行封裝
        print('馬上就有下班啦')
        self.__func()
 
 
@MyDecorator  # @MyDecorator => show = MyDecorator(show)
def show():
    print('快要下雪啦')
 
 
# 執(zhí)行show,就相當(dāng)于執(zhí)行MyDecorator類創(chuàng)建的實例對象,show() => 對象()
show()

擴(kuò)展:

函數(shù)之所以能夠調(diào)用,是因為函數(shù)內(nèi)部實現(xiàn)了 __call__ 方法

感謝各位的閱讀!看完上述內(nèi)容,你們對python裝飾器的寫法有哪些大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁題目:python裝飾器的寫法有哪些-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://jinyejixie.com/article44/ccchee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名動態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計、軟件開發(fā)、手機(jī)網(wǎng)站建設(shè)企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
青神县| 兴城市| 札达县| 福建省| 兴业县| 民权县| 黑龙江省| 焦作市| 海林市| 锡林浩特市| 东兰县| 竹山县| 资溪县| 烟台市| 柞水县| 安庆市| 东源县| 丹东市| 南澳县| 莎车县| 乌拉特前旗| 扎鲁特旗| 施甸县| 长治县| 泊头市| 无锡市| 宁波市| 宁陵县| 遂平县| 紫金县| 宜春市| 石门县| 咸阳市| 山丹县| 武胜县| 淅川县| 永新县| 法库县| 南木林县| 那坡县| 河北省|