Рубрики

Timeit в Python с примерами

Эта статья познакомит вас с методом измерения времени выполнения ваших фрагментов кода Python.
Мы будем использовать встроенную библиотеку Python timeit .

Этот модуль предоставляет простой способ найти время выполнения маленьких битов кода Python.

Почему время?

  • Ну, а как насчет использования простого модуля времени? Просто сэкономьте время до и после выполнения кода и вычтите их! Но этот метод не является точным, поскольку может быть запущен фоновый процесс, который прерывает выполнение кода, и вы получите значительные изменения во времени выполнения небольших фрагментов кода.
  • timeit запускает ваш фрагмент кода миллионы раз (значение по умолчанию — 1000000), так что вы получите наиболее статистически значимое измерение времени выполнения кода!
  • TimeIt довольно прост в использовании и имеет интерфейс командной строки, а также вызываемый.

Итак, теперь давайте начнем исследовать эту удобную библиотеку!

Функция модуля timeit.timeit (stmt, setup, timer, number) принимает четыре аргумента:

  • stmt — это утверждение, которое вы хотите измерить; по умолчанию это «пройти».
  • setup, который является кодом, который вы запускаете перед запуском stmt ; по умолчанию это «пройти».
    Обычно мы используем это для импорта необходимых модулей для нашего кода.
  • таймер, который является объектом timeit.Timer ; обычно оно имеет разумное значение по умолчанию, поэтому вам не нужно об этом беспокоиться.
  • число, которое является числом выполнений, которые вы хотели бы запустить stmt .

Где функция timeit.timeit () возвращает количество секунд, которое потребовалось для выполнения кода.

Пример 1

Давайте сначала посмотрим на основной пример.

# импорт необходимого модуля

import timeit

  
# фрагмент кода выполняется только один раз

mysetup = "from math import sqrt"

  
# фрагмент кода, время выполнения которого нужно измерить

mycode = «»»

def пример ():

    mylist = []

    для х в диапазоне (100):

        mylist.append (SQRT (х))

«»»

  
# timeit заявление

print timeit.timeit(setup = mysetup,

                    stmt = mycode,

                    number = 10000)

  • Результатом вышеприведенной программы будет время выполнения (в секундах) для 10000 итераций фрагмента кода, переданного функции timeit.timeit () .

    Примечание: Обратите внимание на то , что выход является время выполнения итерации число раз фрагмента кода, а не одну итерацию. Для одной итерации exec. время, разделите время выхода на число .

  • Программа довольно проста. Все, что нам нужно сделать, это передать код в виде строки в функцию timeit.timeit () .
  • Рекомендуется сохранять операторы импорта и другие статические фрагменты кода в аргументе настройки.

Пример 2

Давайте посмотрим на другой практический пример, в котором мы сравним два метода поиска, а именно: бинарный поиск и линейный поиск .
Кроме того, здесь я продемонстрирую еще две возможности : функцию timeit.repeat и вызов функций, уже определенных в нашей программе.

# импорт необходимых модулей

import timeit

  
# функция двоичного поиска

def binary_search(mylist, find):

    while len(mylist) > 0:

        mid = (len(mylist))//2

        if mylist[mid] == find:

            return True

        elif mylist[mid] < find:

            mylist = mylist[:mid]

        else:

            mylist = mylist[mid + 1:]

    return False

  

  
# функция линейного поиска

def linear_search(mylist, find):

    for x in mylist:

        if x == find:

            return True

    return False

  

  
# вычислить время двоичного поиска

def binary_time():

    SETUP_CODE = «»»

из __main__ import binary_search
от случайного импорта randint '' '

  

    TEST_CODE = «»»

mylist = [x для x в диапазоне (10000)]
find = randint (0, len (mylist))
двоичный_поиск (mylist, find) '' '

      

    # timeit.repeat оператор

    times = timeit.repeat(setup = SETUP_CODE,

                          stmt = TEST_CODE,

                          repeat = 3,

                          number = 10000)

  

    # печать минимального исполнения. время

    print('Binary search time: {}'.format(min(times)))        

  

  
# вычислить время линейного поиска

def linear_time():

    SETUP_CODE = «»»

из __main__ import linear_search
от случайного импорта randint '' '

      

    TEST_CODE = «»»

mylist = [x для x в диапазоне (10000)]
find = randint (0, len (mylist))
linear_search (mylist, найти)

    «»»

    # timeit.repeat оператор

    times = timeit.repeat(setup = SETUP_CODE,

                          stmt = TEST_CODE,

                          repeat = 3,

                          number = 10000)

  

    # печать минимального исполнения. время

    print('Linear search time: {}'.format(min(times)))  

  

if __name__ == "__main__":

    linear_time()

    binary_time()

  • Вывод вышеуказанной программы будет минимальным значением в списке раз .
    Вот как выглядит пример вывода:
  • Функция timeit.repeat () принимает один дополнительный аргумент, repeat . Выводом будет список времени выполнения всех запусков кода, повторенных с указанным номером. раз.
  • В аргументе настройки мы передали:
    from __main__ import binary_search
    from random import randint

    Это импортирует определение функции binary_search , уже определенной в программе, и случайную библиотечную функцию randint .

  • Как и ожидалось, мы заметили, что время выполнения бинарного поиска значительно меньше, чем линейного поиска!

Пример 3
Наконец, ниже я продемонстрирую, как вы можете использовать интерфейс командной строки модуля timeit :

Здесь я объясняю каждый термин в отдельности:

Итак, это было краткое, но краткое введение в модуль timeit и его практическое применение.
Это очень удобный инструмент для программистов на Python, когда им требуется быстрый взгляд на время выполнения их фрагментов кода.

Эта статья предоставлена Нихилом Кумаром . Если вам нравится GeeksforGeeks и вы хотели бы внести свой вклад, вы также можете написать статью, используя contrib.geeksforgeeks.org, или отправить свою статью на электронный адрес contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Timeit в Python с примерами

0.00 (0%) 0 votes