gpt4 book ai didi

python - timeit.timeit 方法的装饰器?

转载 作者:行者123 更新时间:2023-11-28 20:01:13 26 4
gpt4 key购买 nike

我正在尝试编写一个简单的时间装饰器来测量函数所花费的时间。但是下面的代码给出了我们的递归错误。有什么问题吗?

import timeit

def measure(func):
def wrapper():
func_name = func.__name__
setup="from __main__ import {}".format(func_name)
op_time = timeit.timeit('{}()'.format(func_name), number = 2, setup=setup)
print(ot)
return wrapper

@measure
def sample():
return 10

sample()

输出

RecursionError                            Traceback (most recent call last)
<ipython-input-61-e079e1bd7fba> in <module>()
15 return 10
16
---> 17 sample()

<ipython-input-61-e079e1bd7fba> in wrapper()
7 func_name = func.__name__
8 setup="from __main__ import {}".format(func_name)
----> 9 op_time = timeit.timeit('{}()'.format(func_name), number = 2, setup=setup)
10 print(ot)
11 return wrapper

~/anaconda3/lib/python3.6/timeit.py in timeit(stmt, setup, timer, number, globals)
231 number=default_number, globals=None):
232 """Convenience function to create Timer object and call timeit method."""
--> 233 return Timer(stmt, setup, timer, globals).timeit(number)
234
235 def repeat(stmt="pass", setup="pass", timer=default_timer,

~/anaconda3/lib/python3.6/timeit.py in timeit(self, number)
176 gc.disable()
177 try:
--> 178 timing = self.inner(it, self.timer)
179 finally:
180 if gcold:

~/anaconda3/lib/python3.6/timeit.py in inner(_it, _timer)

... last 4 frames repeated, from the frame below ...

<ipython-input-61-e079e1bd7fba> in wrapper()
7 func_name = func.__name__
8 setup="from __main__ import {}".format(func_name)
----> 9 op_time = timeit.timeit('{}()'.format(func_name), number = 2, setup=setup)
10 print(ot)
11 return wrapper

RecursionError: maximum recursion depth exceeded while calling a Python object

我有兴趣了解我现有代码的问题,请不要发布替代解决方案。

最佳答案

from functools import wraps
from time import time
def measure(func):
@wraps(func)
def _time_it(*args, **kwargs):
start = int(round(time() * 1000))
try:
return func(*args, **kwargs)
finally:
end_ = int(round(time() * 1000)) - start
print(f"Total execution time: {end_ if end_ > 0 else 0} ms")
return _time_it
@measure
def hello():
print('hello world')

hello()

关于python - timeit.timeit 方法的装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51503672/

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