2015-03-26 14 views
24

Я всегда читаю код для вычисления времени, как таким образом:Что такое% timeit в python?

%timeit function() 

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

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

+7

Это волшебная команда от iPython. Смотрите: [iPython Magics] (https://ipython.org/ipython-doc/dev/interactive/magics.html) – Jkdc

ответ

27

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

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

% 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 

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

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

+0

Есть ли способ установить макрос или набор строк из оболочки ipython? –

1

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

13

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

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

%lsmagic 

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

Некоторая дополнительная магическая информация из документации here:

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

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

In [1]: %timeit range(100) 

vs.

In [1]: %%timeit x = range(100) 
Смежные вопросы