Python-使用decorator测量函数执行时间



我有下一个问题:例如,我有一个函数(这只是一个简化的例子(,名为my_pow,它接受两个参数并返回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,这样我会得到一个正确的执行时间,但my_pow((函数不会返回None,或者我可以返回res,但运行所需的时间大约是0.0001,尽管很明显装饰函数运行的时间要长得多,实际上大约是3秒。有没有一种方法可以测量运行该函数需要多长时间,同时从函数返回res值?

您的函数运行时间为0.0001秒左右。但由于数字太大,打印它几乎需要3秒。所以你的代码正在工作,I/O(打印(很慢。如果你只打印它所花费的时间,你就可以自己看到它。

为了进一步证明这一点,并添加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

最新更新