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