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

Что такое% timeit в python?

Я всегда читаю код для вычисления времени следующим образом:

%timeit function()

Можете ли вы объяснить, что означает "%" здесь?

Я думаю, что "%" всегда используется для замены чего-то в строке, например,% s означает замену строки,% d заменяет данные, но я понятия не имею об этом случае.

4b9b3361

Ответ 1

%timeit - магическая функция ipython, которую можно использовать для определения времени определенного фрагмента кода (отдельного оператора выполнения или одного метода).

Из документов:

% timeit

Time execution of a Python statement or expression

Usage, in line mode:
    %timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statement

Чтобы использовать его, например, если мы хотим выяснить, является ли использование xrange быстрее, чем использование range, вы можете просто сделать:

In [1]: %timeit for _ in range(1000): True
10000 loops, best of 3: 37.8 µs per loop

In [2]: %timeit for _ in xrange(1000): True
10000 loops, best of 3: 29.6 µs per loop

И вы получите время для них.

Основное преимущество %timeit:

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

  • % timeit автоматически рассчитает количество запусков, требуемых для вашего кода, на основе всего 2 секунд выполнения окна.

  • Вы также можете использовать текущие консольные переменные, не передавая весь фрагмент кода, как в случае timeit.timeit для создания переменной, которая создается в другой среде, которая работает timeit.

Ответ 2

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

Если вы хотите увидеть всю магию, которую можете использовать, вы можете просто набрать:

%lsmagic

чтобы получить список как магических линий, так и клеточных магий.

Некоторая дополнительная волшебная информация из документации здесь:

В IPython есть система команд, которую мы называем магией, которая фактически обеспечивает мини-командный язык, который ортогонален синтаксису Python и расширяется пользователем новыми командами. Магии предназначены для ввода в интерактивном режиме, поэтому они используют соглашения командной строки, такие как использование пробела для разделения аргументов, тире для параметров и другие соглашения, типичные для среды командной строки.

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

In [1]: %timeit range(100)

против

In [1]: %%timeit 
      : x = range(100)
      :

Ответ 4

Я просто хотел бы добавить еще одно полезное преимущество использования% timeit для ответа от mu 無, что:

  • Вы также можете использовать текущие консольные переменные, не пропуская весь фрагмент кода, как в случае timeit.timeit, чтобы создать переменную, которая встроена в другую среду, которая работает timeit.

PS: я знаю, что это должен быть комментарий, чтобы ответить выше, но у меня в настоящее время недостаточно репутации для этого, надеюсь, что то, что я напишу, будет кому-то полезно и поможет мне заработать достаточно репутации, чтобы комментировать в следующий раз.