Python返回时间性能time.clock()

时间:2018-06-14 19:55:23

标签: python performance time return

我有以下代码,我想测量时间性能。

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
如何将功能结果与时间性能一起返回?我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

ab是你的函数的结果,你正在返回一个元组...正好在主要的斐波那契调用外部函数,在一个函数中包装器例如:

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