import random
import time
def timeit(func):
def wrapper(*args, **kwargs):
start = time.time()
func(*args, **kwargs)
print ("{} took {} secs \n".format(func.__name__, time.time() - start))
return wrapper
@timeit
def insort(l):
""" Uses insetion sort for sorting list """
for i in range(1, len(l)):
temp = l[i]
j = i
while j > 0 and l[j - 1] > temp:
l[j] = l[j - 1]
j -= 1
l[j] = temp
return l
@timeit
def bublesort(l):
""" Uses insetion sort for sorting list """
for i in range(len(l)-1, 0, -1):
for j in range(i):
if l[j] > l[j+1]:
l[j], l[j+1] = l[j+1], l[j]
return l
x =random.sample(range(2000), 1000)
print (insort(x[:]))
print (bublesort(x[:]))
以上代码输出:
insort took 0.0629999637604 secs
None
bublesort took 0.104000091553 secs
None
为什么在每次结果后都不打印,我该如何预防呢? 此外,我是装饰员的新手,所以我想知道是否有更好的方法来计时我的代码。
答案 0 :(得分:2)
替换原始函数的包装器忽略返回值并返回a = [[1, 2, 3], [11, 12, 13]]
b = [1, 2, 3]
class Array
def meow
case self
when Array(Array(Int32))
puts self.transpose
else
puts "OK"
end
end
end
a.meow
b.meow
。
进行以下更改:
def timeit(func): def wrapper(*args, **kwargs): start = time.time() ret = func(*args, **kwargs) print ("{} took {} secs \n".format(func.__name__, time.time() - start)) return ret return wrapper
这将使您的装饰工作正常。如果要避免打印返回值,请更改
None
到
print (insort(x[:]))
print (bublesort(x[:]))
一般情况下,如果您不想打印某些内容,请不要将其传递给insort(x[:])
bublesort(x[:])
。
答案 1 :(得分:2)
为什么在每次结果后都不打印,我该如何预防呢?此外,我是装饰员的新手,所以我想知道是否有更好的方法来计时我的代码。
它正在打印包装器(None)的返回值,因为:
print (insort(x[:]))
print (bublesort(x[:]))
您告诉解释器打印这些函数的返回值。
如果您不想看到None
,那么您应该调用这些函数:
insort(x[:])
bublesort(x[:])