为什么一组总计中的最佳函数时间小于上一次函数调用?

2024-04-25 13:33:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写3个不同的函数:

第一个度量函数运行x次所需的时间

第二种方法测量每次调用所用的时间并返回最佳值

第三个返回从多次重复到第一个函数调用的最佳时间

但是,从上一个函数返回的结果来看,total的所有运行中的“最佳”时间比total的最后一个调用要长

这对我来说似乎很奇怪,因为我认为“最好的”应该是所有电话中最低的

我正在ManjaroLinux操作系统上用Pycharm运行这个程序。Python 3.7版

"""
Homegrown timing tools for function calls.
Does total time, best of time, and best of totals time
"""

import time, sys
timer = time.process_time if sys.platform == 'win' else time.time

def total(reps, func, *args, **kwargs):
    repslist = list(range(reps))
    start = timer()
    for i in repslist:
        ret = func(*args, **kwargs)
    elapsed = timer() - start
    return (elapsed, ret)

print(total(40, pow, 2, 50))

def bestof(reps, func, *args, **kwargs):
    best = 2 ** 32
    repslist = list(range(reps))
    for i in repslist:
        start = timer()
        ret = func(*args, **kwargs)
        elapsed = timer() - start
        #print('elapsed', elapsed)
        if elapsed < best:
            best = elapsed
            #print('best', best)
    return (best, ret)

print(bestof(40, pow, 2, 50))

def bestoftotal(reps1, reps2, func, *args, **kwargs):
    return bestof(reps1, total, reps2, func, *args, **kwargs)

print(bestoftotal(50, 40, pow, 2, 50))

这是我得到的结果:

(1.6689300537109375e-05, 1125899906842624)
(2.384185791015625e-07, 1125899906842624)
(1.5974044799804688e-05, (1.5020370483398438e-05, 1125899906842624))

但是,最后一个调用在我看来并不正确,因为最左边的值是所有总计中的“最佳”时间,右边是最后一个调用的总计以及pow函数返回的值。最后一个电话不是最好的吗???或者这个调用不包括在bestof函数中


Tags: 函数time时间argsstartkwargstotalbest