Почему лучшее время функции из группы итогов меньше, чем последний вызов функции? - PullRequest
0 голосов
/ 24 октября 2019

Я пишу 3 разные функции:

Первая измеряет время, необходимое для запуска функции х количество раз

Вторая измеряет время, которое занимает каждый вызов, и возвращает лучшее

Третий возвращает лучшее время из числа повторений до первого вызова функции.

Однако в результатах, которые я получаю от последней функции, «лучшее» из всех прогоновитого больше времени, чем последний звонок итога.

Это кажется мне странным, поскольку я думаю, что "лучший" будет самым низким из всех сделанных вызовов ...

Я запускаю это в Pycharm на ОС Manjaro Linux. 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 ??

...