Время цикла

Рейтинг: 0Ответов: 3Опубликовано: 04.02.2015

Ребята, напомните, как проверить, за какое время выполняется цикл.

Ответы

▲ 3

Код пишу на глаз, не проверял, но должно работать, в теории.

import time

timer_begin = time.time()

# Тут ваш цикл

timer_end = time.time()
timer_secs = timer_end - timer_begin
times_msecs = timer_secs * 1000
print 'Затраченное время: %f ms' % timer_msecs

Но, у модуля time, вроде, есть готовый способ делать замер. Надо гуглить, но лень)

Upd. Можно это еще классом оформить, примерно так:

import time

class Timer(object):

def __init__(self, verbose = False):
    self.verbose = verbose
    self.start = ''
    self.end = ''
    self.secs = ''
    self.msecs = ''

def __enter__(self):
    self.start = time.time()
    return self

def __exit__(self, *args):
    self.end = time.time()
    self.secs = self.end - self.start
    self.msecs = self.secs * 1000

    if self.verbose:
        print 'Затраченное время: %f ms' % self.msecs

А потом, в нужном месте делать так:

import Timer
with Timer() as t:
    # Тут то, что нужно замерить.
print u"Затраченное время: %.7s сек.\n" % t.secs

Или так:

import Timer
with Timer(True) as t:
    # Тут то, что нужно замерить.

Но что-то меня понесло, пойду спать.

▲ 2

Возможно, вам также подойдет модуль timeit:

$ python -m timeit '"-".join(str(n) for n in range(100))'
10000 loops, best of 3: 40.3 usec per loop

Или вот так:

def test():
    """Stupid test function"""
    L = []
    for i in range(100):
        L.append(i)

if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test()", setup="from __main__ import test"))

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

▲ 1

А зачем для этого какие-то велосипеды? unittest это показывает по умолчанию.

from unittest import TestCase

def fib(n):
    if n < 2:
        return n
    prev, cur = 0, 1
    for _ in xrange(n - 1):
        prev, cur = cur, prev + cur
    return cur

class TestFibonacci(TestCase):

    def test300(self):
        fib300 = 222232244629420445529739893461909967206666939096499764990979600
        self.assertEqual(fib(300), fib300)

D:\Python>c:\Python27\python.exe -m unittest discover
.
----------------------------------------------------------------------
Ran 1 test in 0.035s

OK