Timing blocks of code - Python
本问题已经有最佳答案,请猛点这里访问。
我正在尝试测量在Python中运行一组指令所需的时间,但我不想写下这样的内容:
1 2 3 4 5 | start = time.clock() ... <lines of code> ... time_elapsed = time.clock() - start |
相反,我想知道是否有一种方法可以将指令块作为参数发送给返回已用时间的函数,如
1 | time_elapsed = time_it_takes(<lines of code>) |
这种方法的实现可能是这样的
1 2 3 4 | def time_it_takes(<lines of code>): start = time.clock() result = <lines of code> return (result, time.clock() - start) |
有人知道我是否有办法做到这一点? 提前致谢。
这将很好地利用装饰器。你可以写一个像这样做的装饰器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import time def timer(func): def wrapper(*args, **kwargs): start = time.time() func(*args, **kwargs) print('The function ran for', time.time() - start) return wrapper @timer def just_sleep(): time.sleep(5) just_sleep() |
产量
1 | The function ran for 5.0050904750823975 |
然后你可以用
注意:这不是测量python中函数执行时间的最准确方法
您可以构建自己的上下文管理器来为相对较长的代码计时。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import time class MyTimer(object): def __enter__(self): self.start = time.clock() return self def __exit__(self, typ, value, traceback): self.duration = time.clock() - self.start with MyTimer() as timer: time.sleep(3) print(timer.duration) |
但要小心你测量的是什么。在Windows
如果您使用IPython,这是一件好事,您可以将代码构造为单行,即函数调用:
1 | %timeit your-code |
这对我来说很方便。希望能帮助到你。
使用