Подтвердить что ты не робот

Временной блок кода в Python, не ставя его в функцию

Я хотел бы выделить блок кода, не помещая его в отдельную функцию. например:

def myfunc:
  # some code here
  t1 = time.time()
  # block of code to time here
  t2 = time.time()
  print "Code took %s seconds." %(str(t2-t1))

однако, я хотел бы сделать это с помощью модуля timeit более чистым способом, но я не хочу делать отдельную функцию для блока кода.

спасибо.

4b9b3361

Ответ 1

Вы можете сделать это с помощью оператора with. Например:

import time    
from contextlib import contextmanager

@contextmanager  
def measureTime(title):
    t1 = time.clock()
    yield
    t2 = time.clock()
    print '%s: %0.2f seconds elapsed' % (title, t2-t1)

Используется следующим образом:

def myFunc():
    #...

    with measureTime('myFunc'):
        #block of code to time here

    #...

Ответ 2

Вы можете настроить переменную, чтобы ссылаться на блок кода, который вы хотите использовать, добавив этот блок в тройные кавычки Python. Затем используйте эту переменную при создании экземпляра объекта timeit. Несколько после примера из Python timeit docs, я придумал следующее:

import timeit
code_block = """\
total = 0
for cnt in range(0, 1000):
    total += cnt
print total
"""
tmr = timeit.Timer(stmt=code_block)
print tmr.timeit(number=1)

Что для меня напечатано:

499500

0,000341892242432

(Где 499500 - выход блока с таймером, а 0.000341892242432 - время работы.)

Ответ 3

В соответствии с Skilldrick answer есть глупый модуль, который, я думаю, может помочь: BlockLogginInator.

import time
from blocklogginginator import logblock  # logblock is the alias

with logblock(name='one second'):
    """"
    Our code block.
    """
    time.sleep(1)

>>> Block "one second" started 
>>> Block "one second" ended (1.001)