1. 程式人生 > >Python裝飾器函數

Python裝飾器函數

cor 動態 定義 增加 方式 休眠 混亂 一秒 變量

裝飾器函數

這裏定義了一個func函數,打印‘我是func函數’

def func():
    print(‘我是func函數‘);
        time.sleep(1);

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

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

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

def logger(flag):
    #裝飾器
    def tool(f):#f:func方法的方法名
        def inner():#利用了高階函數
            #開始的時間
            starttime=time.time();
            f();#真正的執行方法,調用了func
            #結束的時間
            endtime=time.time();
            print(‘用時:%s秒‘%(endtime-starttime));
            if flag==‘true‘:
                print(‘你傳入了TRUE變量‘)
        return inner;#內層方法的函數名
    return tool;
#主方法。想要給修飾器傳參,在修飾器外重新生成修飾器
@logger(‘true‘)
def func():
    print(‘我是func函數‘);
    time.sleep(1);#休眠一秒
func();

Python裝飾器函數