【问题标题】:perf_counter()-start giving weird resultperf_counter() - 开始给出奇怪的结果
【发布时间】:2023-02-07 06:22:25
【问题描述】:

我正在构建自己的 timeit 函数版本,它返回运行函数 n 次所需的时间。但是,当我使用示例输入运行它时,我收到了以下输出,这似乎不正确,因为它运行得非常快。

9.400071576237679e-06

我的代码:

from time import perf_counter
from typing import Callable

class MyTimeit:
    def __init__(self):
        pass 
    def timeit(self, function: Callable, *parameters, num: int=10000):
        if not parameters:
            start = perf_counter()
            for _ in range(num):
                function()
            return perf_counter()-start
        else:
            start = perf_counter()
            for _ in range(num):
                function(*parameters)
            return perf_counter()-start

print(MyTimeit().timeit(lambda x: x<12, 10, n=100))

我做错了什么吗?

【问题讨论】:

  • e-06 后缀告诉您将小数点移动六位。
  • 你得到的时间值是科学计数法。 “e”代表“10 的次方”,因此您的代码运行时间约为 9.4 * 10^-9,即 9.4 纳秒。

标签: python function time timeit


【解决方案1】:

它工作正常,你的功能非常快,所以它在几微秒内执行。您可以使用需要几秒钟才能运行的东西来测试它,比如sleep。请注意,对于非常快的函数,与 for 循环的每次运行相比,初始开销很大。您可以使用n = 0 测量开销。

from time import perf_counter, sleep
from typing import Callable

class MyTimeit:
    def __init__(self):
        pass 
    def timeit(self, f: Callable, *args, n: int=10000):
        if not args:
            s = perf_counter()
            for _ in range(n):
                f()
            return perf_counter()-s
        else:
            s = perf_counter()
            for _ in range(n):
                f(*args)
            return perf_counter()-s

print(MyTimeit().timeit(sleep, 1, n=5))

【讨论】:

    猜你喜欢
    • 2013-08-20
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多