время функции python-measure

У меня проблема с измерением времени функции.

Моя функция - «линейный поиск»:

def linear_search(obj, item,):
    for i in range(0, len(obj)):
        if obj[i] == item:
        return i
    return -1

И я сделал еще одну функцию, которая измеряет время 100 раз и добавляет все результаты в список:

def measureTime(a):
    nl=[]
    import random
    import time
    for x in range(0,100): #calculating time
        start = time.time() 
        a   
        end =time.time()
        times=end-start
        nl.append(times)
    return nl

Когда я использую measureTime(linear_search(list,random.choice(range(0,50)))), функция всегда возвращается [0.0].

Что может вызвать эту проблему? Благодарю.

python,function,time,measure,

0

Ответов: 2


0 принят

Взгляните на следующий пример: не знаете точно, чего вы пытаетесь достичь, поэтому я догадался об этом;)

import random
import time

def measureTime(method, n, *args):
    start = time.time()
    for _ in xrange(n):
        method(*args)
    end = time.time()
    return (end - start) / n

def linear_search(lst, item):
    for i, o in enumerate(lst):
        if o == item:
            return i
    return -1

lst = [random.randint(0, 10**6) for _ in xrange(10**6)]
repetitions = 100
for _ in xrange(10):
    item = random.randint(0, 10**6)
    print 'average runtime =', 
    print measureTime(linear_search, repetitions, lst, item) * 1000, 'ms'

1

вы фактически передаете результат linear_searchв функцию measureTime, вам нужно передать функцию и аргументы вместо них, чтобы они выполнялись внутри measureTimeфункции, например @ martijnn2008 answer

Или лучше, вы можете рассмотреть возможность использования модуля timeit для работы на вас

from functools import partial
import timeit
def measureTime(n, f, *args):
    # return average runtime for n number of times
    # use a for loop with number=1 to get all individual n runtime
    return timeit.timeit(partial(f, *args), number=n)

# running within the module
measureTime(100, linear_search, list, random.choice(range(0,50)))

# if running interactively outside the module, use below, lets say your module name mymodule
mymodule.measureTime(100, mymodule.linear_search, mymodule.list, mymodule.random.choice(range(0,50)))
питон, функция, время измерения,
Похожие вопросы