我有以下代码,我想测量时间性能。
import time
def fibonacci(n):
t0 = time.clock()
if n == 0:
return 0
elif n == 1:
return 1
else:
a = fibonacci(n-1)
b = fibonacci(n-2)
return a + b, time.clock()
当我跑步时,返回Type error: can only concatenate tuple (not "int") to tuple
如何将功能结果与时间性能一起返回?我在这里缺少什么?
答案 0 :(得分:2)
a
和b
是你的函数的结果,你正在返回一个元组...正好在主要的斐波那契调用外部函数,在一个函数中包装器例如:
def time_fibonacci(n):
start = time.clock()
result = fibonacci(n)
# return a tuple: result + cpu time
return result, time.clock() - start
并固定斐波那契本身(没有计时):
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
a = fibonacci(n-1)
b = fibonacci(n-2)
return a + b
答案 1 :(得分:1)
如果你想让函数本身返回时间,你必须记住这是一个自我调用的递归函数,所以你必须考虑(并且可能丢弃)内部调用时序结果。您还必须编辑所有 return
语句:
def fibonacci(n):
t0 = time.clock()
if n == 0:
return 0, time.clock() - t0
elif n == 1:
return 1, time.clock() - t0
else:
a, _ign = fibonacci(n-1)
b, _ign = fibonacci(n-2)
return a + b, time.clock() - t0
另一种方法是测量外部函数的时间,这样就不必修改函数了:
t0 = time.clock()
fibonacci(some_number) # call the original function without timing
time_taken = time.clock() - t0