Python - 用装饰器测量函数执行时间

Python - measure function execution time with decorator

我有下一个问题: 例如,我有一个名为 my_pow 的函数(这只是一个简单的例子),它有两个参数和 return a^b,它看起来像这样:

def my_pow(a, b):
    res = a ** b
    return res
    # or just return a ** b, it doesn't really matter

而且我有一个装饰器,它应该测量装饰函数执行了多长时间 运行。

def decorator_timer(some_function):
    from time import time

    def wrapper(*args, **kwargs):
        t1 = time()
        result = some_function(*args, **kwargs)
        return result, time()-t1
    return wrapper

问题是,我无法真正测量函数计算所花费的时间,例如 99999 ** 99999。我可以计算它并打印 res,这样我就可以得到正确的执行时间,但是 None 将从 my_pow() 函数 returned,或者我可以 return res,但是 运行 花费的时间将是 0.0001,虽然明显装饰函数是 运行ning 更长的时间,实际上大约 3 秒。有没有一种方法可以测量运行那个函数花了多长时间,同时return一个函数的res值?

您的函数 运行 在 0.0001 秒内。但是由于数字太大,打印它几乎需要 3 秒。所以你的代码正在运行, I/O(print) 只是很慢。只打印花费的时间就可以自己看。

为了进一步证明这一点并添加 emil 的评论

def decorator_timer(some_function):
    from time import time

    def wrapper(*args, **kwargs):
        t1 = time()
        result = some_function(*args, **kwargs)
        end = time()-t1
        return result, end
    return wrapper


@decorator_timer
def my_pow(a, b):
    res = a ** b
    return res
    # or just return a ** b, it doesn't really matter

result, exec_time = my_pow(99999 , 99999)
print(exec_time) # prints after 0.07347989082336426 seconds
print(result) # takes ~3 seconds