首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >timeit.timeit方法的装饰器?

timeit.timeit方法的装饰器?
EN

Stack Overflow用户
提问于 2018-07-25 00:38:05
回答 1查看 8.4K关注 0票数 7

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

代码语言:javascript
复制
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()

输出

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-25 00:48:34

代码语言:javascript
复制
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()
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51503672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档