|
发表于 2020-1-1 12:00:44
|
显示全部楼层
我试了一下
这是我计算运行时间的修饰器:- import time
- class TimeFunc:
- def __init__(self,Func):
- self.Func=Func
- self.sumRunTime=0.0
- self.countRun=0
- def __call__(self,*args,**kwargs):
- t1=time.clock()*1000
- ret=self.Func(*args,**kwargs)
- t2=time.clock()*1000
- self.countRun+=1
- self.sumRunTime+=t2-t1
- return ret
- def clear(self):
- self.sumRunTime=0
- self.countRun=0
- def GetAveRunTime(self):
- if self.countRun==0:
- return -1
- return self.sumRunTime/self.countRun
复制代码
这是测试代码- from module1 import TimeFunc
- import math
- @TimeFunc
- def f295(n):
- res=[]
- def dp(base,l,r):
- if l==0:
- res.append(base+')'*r)
- else:
- dp(base+'(',l-1,r)
- if l<r:
- dp(base+')',l,r-1)
- dp('',n,n)
- return res
- @TimeFunc
- def func297_2(n:int)->list:
- ret=[(0,"")]
- for i in range(2*n):
- temp=[]
- for l in ret:
- if l[0]>0:
- temp.append((l[0]-1,l[1]+")"))
- if l[0]<2*n-i:
- temp.append((l[0]+1,l[1]+"("))
- ret=temp
- return [i[1] for i in ret]
- for i in range(1,20):
- f295(i)
- func297_2(i)
- print("%d\t%f\t%f"%(i,f295.GetAveRunTime(),func297_2.GetAveRunTime()))
- f295.clear()
- func297_2.clear()
复制代码
测试结果:- 1 0.021900 0.020900
- 2 0.028100 0.027100
- 3 0.055200 0.033600
- 4 0.092900 0.074800
- 5 0.259200 0.201000
- 6 0.766200 0.622900
- 7 2.486100 2.004500
- 8 8.053500 7.573700
- 9 27.519100 24.749500
- 10 96.716700 91.843300
- 11 331.920700 301.414800
- 12 1161.430700 1098.966200
- 13 4146.963900 3979.403900
- 14 14975.798600 14503.480000
- 15 54112.200300 52794.922200
复制代码 |
|