查找总结了几种方法:
1、一个引入计次装饰器,
2、一个是嵌套函数
3、多传一个计次参数,本质和入计次装饰器一样
import time
#一个引入计次装饰器,
class Counter(object):
def __init__(self, fun):
self._fun = fun
self.counter = 1
def __call__(self, *args, **kwargs):
self.counter += 1
return self._fun(*args, **kwargs)
def simpletimer(func):
def wrapper(*arg, **kwargs):
s = time.time()
res = func(*arg, **kwargs)
e = time.time()
print(e - s)
return res
return wrapper
def counttimer(func):
def wrapper(*args, **kwargs):
if func.counter == 1:
s = time.time()
res = func(*args, **kwargs)
e = time.time()
print(e - s)
return res
else:
return func(*args, **kwargs)
return wrapper
def argtime(func):
def wrapper(*args,**kwargs):
if args[1] == 1:
s = time.time()
res = func(*args, **kwargs)
e = time.time()
print(e - s)
return res
else:
return func(*args, **kwargs)
return wrapper
@simpletimer
def simple_func(n):
time.sleep(1)
if n == 1:
return 1
return n + simple_func(n - 1)
@counttimer
@Counter
def count_func(n):
time.sleep(1)
if n == 1:
return 1
return n + count_func(n - 1)
@simpletimer
#嵌套函数
def nestfunc(n):
def func(n):
time.sleep(1)
if n == 1:
return 1
return n + func(n - 1)
return func(n)
@argtime
#多传一个计次参数count,本质和count计次装饰器一样
def argfunc(n,count):
time.sleep(1)
if n==1:
return 1
count+=1
return n+argfunc(n-1,count)
if __name__ == '__main__':
simple_res = simple_func(5)
print('-'*10)
count_res = count_func(5)
print('-' * 10)
nest_res = nestfunc(5)
print('-' * 10)
arg_res = argfunc(5,1)
输出:
1.0012590885162354
2.0064640045166016
3.006768226623535
4.008423805236816
5.012547016143799
----------
5.009505033493042
----------
5.015216112136841
----------
5.014286756515503