Что такое% timeit в python?
Я всегда читаю код для вычисления времени следующим образом:
%timeit function()
Можете ли вы объяснить, что означает "%" здесь?
Я думаю, что "%" всегда используется для замены чего-то в строке, например,% s означает замену строки,% d заменяет данные, но я понятия не имею об этом случае.
Ответы
Ответ 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)
:
Ответ 3
IPython перехватывает их, они называются встроенными магическими командами, вот список: https://ipython.org/ipython-doc/dev/interactive/magics.html
Вы также можете создать свою собственную магию, https://ipython.org/ipython-doc/dev/config/custommagics.html
Ваш timeit
находится здесь https://ipython.org/ipython-doc/dev/interactive/magics.html#magic-timeit
Ответ 4
Я просто хотел бы добавить еще одно полезное преимущество использования% timeit для ответа от mu 無, что:
- Вы также можете использовать текущие консольные переменные, не пропуская весь фрагмент кода, как в случае timeit.timeit, чтобы создать переменную, которая встроена в другую среду, которая работает timeit.
PS: я знаю, что это должен быть комментарий, чтобы ответить выше, но у меня в настоящее время недостаточно репутации для этого, надеюсь, что то, что я напишу, будет кому-то полезно и поможет мне заработать достаточно репутации, чтобы комментировать в следующий раз.