python--裝飾器--測(cè)試程序運(yùn)行次數(shù)以及程序運(yùn)行時(shí)間

python的裝飾器應(yīng)用極其廣泛,在python--學(xué)習(xí)的章節(jié)有所描述,在這里寫兩個(gè)常用的裝飾器。

測(cè)試程序運(yùn)行次數(shù)的裝飾器

def run_times_outt(func):
    count = 0
    def run_times_inn(*args,**kwargs):
        nonlocal count
        count += 1
        func(*args,**kwargs)
        print('函數(shù)func運(yùn)行次數(shù)為:{}'.format(count))
    return run_times_inn

@run_times_outt
def test_func():
    print('函數(shù)運(yùn)行了?。?!')

for i in range(10):
    test_func()

運(yùn)行結(jié)果:
函數(shù)運(yùn)行了?。?!
函數(shù)func運(yùn)行次數(shù)為:1
函數(shù)運(yùn)行了?。。?函數(shù)func運(yùn)行次數(shù)為:2
函數(shù)運(yùn)行了?。?!
函數(shù)func運(yùn)行次數(shù)為:3
函數(shù)運(yùn)行了?。。?函數(shù)func運(yùn)行次數(shù)為:4
函數(shù)運(yùn)行了!!!
函數(shù)func運(yùn)行次數(shù)為:5
函數(shù)運(yùn)行了!?。?函數(shù)func運(yùn)行次數(shù)為:6
函數(shù)運(yùn)行了?。?!
函數(shù)func運(yùn)行次數(shù)為:7
函數(shù)運(yùn)行了!??!
函數(shù)func運(yùn)行次數(shù)為:8
函數(shù)運(yùn)行了?。。?函數(shù)func運(yùn)行次數(shù)為:9
函數(shù)運(yùn)行了!!!
函數(shù)func運(yùn)行次數(shù)為:10

測(cè)試函數(shù)運(yùn)行時(shí)間的裝飾器

import time
def run_out_time(func):
    def run_in_time(*args,**kwargs):
        t0 = time.time()
        func(*args,**kwargs)
        t1 = time.time()
        print('函數(shù)運(yùn)行時(shí)間為{}'.format(t1 - t0))
    return run_in_time  
 
@run_out_time
def type_test():
    print('-------------type函數(shù)運(yùn)行時(shí)間----------------------')
    for i in range(10000):
        type('人生苦短,我用python')

type_test()

運(yùn)行結(jié)果:
-------------type函數(shù)運(yùn)行時(shí)間----------------------
函數(shù)運(yùn)行時(shí)間為0.0009984970092773438

這兩個(gè)裝飾器在程序測(cè)試中會(huì)經(jīng)常用到。也可以聯(lián)合使用。

import time
def run_times_outt(func):
    count = 0
    def run_times_inn(*args,**kwargs):
        nonlocal count
        count += 1
        func(*args,**kwargs)
        print('函數(shù){}運(yùn)行次數(shù)為:{}'.format(func,count))
    return run_times_inn
def run_time_outt(func):
    def run_time_inn(*args,**kwargs):
        t = time.time()
        func(*args,**kwargs)
        print('程序運(yùn)行時(shí)間為:{}'.format(time.time() - t))
    return run_time_inn

@run_times_outt
@run_time_outt
def test_func():
    for i in range(1000000):
        type(i)
    print('函數(shù)運(yùn)行了!??!')

for i in range(10):
    test_func()
輸出:
函數(shù)運(yùn)行了?。?!
程序運(yùn)行時(shí)間為:0.10501623153686523
函數(shù)<function run_time_outt.<locals>.run_time_inn at 0x00000235963F7730>運(yùn)行次數(shù)為:1
函數(shù)運(yùn)行了?。?!
程序運(yùn)行時(shí)間為:0.13301825523376465
函數(shù)<function run_time_outt.<locals>.run_time_inn at 0x00000235963F7730>運(yùn)行次數(shù)為:2
函數(shù)運(yùn)行了!?。?程序運(yùn)行時(shí)間為:0.12669014930725098
函數(shù)<function run_time_outt.<locals>.run_time_inn at 0x00000235963F7730>運(yùn)行次數(shù)為:3
函數(shù)運(yùn)行了?。。?程序運(yùn)行時(shí)間為:0.11151671409606934
函數(shù)<function run_time_outt.<locals>.run_time_inn at 0x00000235963F7730>運(yùn)行次數(shù)為:4
函數(shù)運(yùn)行了?。。?程序運(yùn)行時(shí)間為:0.10951447486877441
函數(shù)<function run_time_outt.<locals>.run_time_inn at 0x00000235963F7730>運(yùn)行次數(shù)為:5
函數(shù)運(yùn)行了?。?!
程序運(yùn)行時(shí)間為:0.1155393123626709
函數(shù)<function run_time_outt.<locals>.run_time_inn at 0x00000235963F7730>運(yùn)行次數(shù)為:6
函數(shù)運(yùn)行了!?。?程序運(yùn)行時(shí)間為:0.11101078987121582
函數(shù)<function run_time_outt.<locals>.run_time_inn at 0x00000235963F7730>運(yùn)行次數(shù)為:7
函數(shù)運(yùn)行了?。?!
程序運(yùn)行時(shí)間為:0.10601115226745605
函數(shù)<function run_time_outt.<locals>.run_time_inn at 0x00000235963F7730>運(yùn)行次數(shù)為:8
函數(shù)運(yùn)行了?。?!
程序運(yùn)行時(shí)間為:0.10701227188110352
函數(shù)<function run_time_outt.<locals>.run_time_inn at 0x00000235963F7730>運(yùn)行次數(shù)為:9
函數(shù)運(yùn)行了!??!
程序運(yùn)行時(shí)間為:0.10759115219116211
函數(shù)<function run_time_outt.<locals>.run_time_inn at 0x00000235963F7730>運(yùn)行次數(shù)為:10

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容