gpt4 book ai didi

python - 运行时检查功能

转载 作者:行者123 更新时间:2023-12-01 01:41:32 26 4
gpt4 key购买 nike

我知道我可以使用时间模块来跟踪代码的运行时间:

例如,如果我有这个带递归的斐波那契函数

def fib_gen_r(i):
"""
Fibonacci function generator
generate the fibonacci number at 'i'th posistion
"""
if i == 0:
return 0
elif i == 1:
return 1
else:
return fib_gen_r(i - 1) + fib_gen_r(i - 2)

我可以做到这一点:

import time
start_time = time.time()
print(fib_gen_r(35))
print(f"--- {time.time() - start_time}s seconds ---\n")
# >>>
# 9227465
# --- 2.556117296218872s seconds ---

但是,如果我不想每次都写这个,我写了一个函数:

def time_spend(code_to_check):
import time
start_time = time.time()
print(code_to_check)
print(f"--- {time.time() - start_time}s seconds ---\n")

time_spend(fib_gen_r(35))
# >>>
# check run-time:
# 9227465
# --- 0.0s seconds ---

不知何故,它没有读取运行时,我做错了什么?

谢谢

最佳答案

调用time_spend之前调用fib_gen_r函数。相反,您必须将实际函数作为参数传递,而不调用它,并在 time_spend 内调用它。

此代码 time_spend(fib_gen_r(35)) 首先调用 fib_gen_r,完成后将结果传递给 time_spend。不是您想要的,因为您无法衡量已经完成的内容。相反,您希望使用此语法 time_spend(fib_gen_r, 35) 将实际的函数对象作为参数传递,不调用它,以便可以在函数内部调用它:

def time_spend(code_to_check, *args, **kwds):
import time
start_time = time.time()
result = code_to_check(*args, **kwds)
print(f"--- {time.time() - start_time}s seconds ---\n")
return result


time_spend(fib_gen_r, 35)

更简单的替代方法是使用上下文管理器(with 语句):

import contextlib

@contextlib.contextmanager
def time_spend():
import time
start_time = time.time()
yield
print(f"--- {time.time() - start_time}s seconds ---\n")

然后你可以像这样使用它:

with time_spend():
fib_gen_r(35)

关于python - 运行时检查功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51830240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com