溫馨提示×

溫馨提示×

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

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

Python裝飾器函數(shù)

發(fā)布時間:2020-06-11 18:53:28 來源:網(wǎng)絡(luò) 閱讀:189 作者:CallousMaster 欄目:編程語言

裝飾器函數(shù)


這里定義了一個func函數(shù),打印‘我是func函數(shù)’

def func():
    print('我是func函數(shù)');
        time.sleep(1);

假設(shè),想要在func()函數(shù)的基礎(chǔ)之上新增的一個功能,計算func函數(shù)執(zhí)行所用的時間

import time;#時間模塊,處理時間操作
#開閉原則,對擴展開放,對修改封閉
def func():
    print('我是func函數(shù)');
    time.sleep(1);#休眠一秒
#tools方法就是func方法的裝飾器
def tool():
    def inner():#利用了高階函數(shù)
        #開始的時間
        starttime=time.time();
        func();#調(diào)用函數(shù)執(zhí)行上面的方法
        #結(jié)束的時間
        endtime=time.time();
        print('用時:%s秒'%(endtime-starttime));
    return inner;
inner=tool();
inner();

####################調(diào)用的方式混亂 以上策略不推薦
#接下來使用裝飾器,這種在代碼運行期間動態(tài)增加功能的方式,稱之為“裝飾器”(Decorator)。本質(zhì)上,decorator就是一個返回函數(shù)的高階函數(shù)。

def logger(flag):
    #裝飾器
    def tool(f):#f:func方法的方法名
        def inner():#利用了高階函數(shù)
            #開始的時間
            starttime=time.time();
            f();#真正的執(zhí)行方法,調(diào)用了func
            #結(jié)束的時間
            endtime=time.time();
            print('用時:%s秒'%(endtime-starttime));
            if flag=='true':
                print('你傳入了TRUE變量')
        return inner;#內(nèi)層方法的函數(shù)名
    return tool;
#主方法。想要給修飾器傳參,在修飾器外重新生成修飾器
@logger('true')
def func():
    print('我是func函數(shù)');
    time.sleep(1);#休眠一秒
func();
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI