Python не только самый универсальный язык программирования, но и самый гибкий, когда речь заходит об интеграции новых функций. Магические команды являются одной из таких важных функций, добавленных в стандартную оболочку Python.
Что же такое магические команды Python?
Магические команды — это улучшения, добавляемые поверх обычного кода на Python, их предоставляет ядро IPython.
Эти команды обычно начинаются с символа “%”
Магические команды были преимущественно добавлены для решения распространенных проблем, с которыми сталкиваются пользователи. Также в командной оболочке IPython есть несколько сочетаний горячих клавиш, которые значительно облегчат вам работу.
Существует 2 типа магических команд: строчные, обозначенные одним символом %, и ячеечные, обозначенные двойным символом % %.
Префикс % означает, что команда работает на одной строке кода, в то время как префикс %% позволяет команде работать над всей ячейкой.
Ниже приведен список магических команд и примеры их использования в блокнотах Jupyter.
Выполнение внешнего кода
Любой внешний код Python из блокнота Jupyter можно запускать с помощью команды %run.

Файл myCode.py на изображении выше содержит простой скрипт, который выводит предложение “The world makes sense!».

Если мы введем команду %run, а после нее зададим имя файла, она выполнит код, который содержится в указанном файле.
Примечание: %run также позволяет выполнять код из других блокнотов Jupyter.
Время работы кода
Вы никогда не задумывались, сколько именно времени занимает работа кода в рамках одной ячейки?
Магическая команда time позволяет получить всю необходимую информацию о времени.
Поскольку здесь мы будем иметь дело со всей ячейкой, мы будем использовать %% в качестве префикса перед ключевым словом time.

Ячейка на примере выше включает в себя цикл for со случайным вычислением. %%time помогает узнать время, необходимое для перебора в цикле for.
Копирование содержимого во внешний файл
В большинстве случаев возникает необходимость скопировать содержимое вашей ячейки в скрипт python или текстовый файл непосредственно из вашего блокнота Jupyter.
Вместо того чтобы копировать все и создавать новый файл, вы можете напрямую экспортировать свои данные, добавив команду writefile в ячейку перед кодом.
Обратите внимание на двойной % перед командой, который говорит о том, что будет экспортировано содержимое всей ячейки.

Поскольку у меня уже был создан файл с некоторым кодом, этот код выводит «Overwriting myCode.py» (Перезапись файла). Это говорит о том, что исходное содержимое будет заменено кодом, показанным на изображении выше.
Просмотр содержимого внешнего файла
Часто вам может понадобиться скопировать в свой код несколько строк кода из внешнего файла. Команда %pycat избавит вас от долгой процедуры извлечения определенных данных из файла и их копирования в другой файл. Она позволяет просматривать содержимое любого файла в любом каталоге.

Содержимое внешнего файла отображается в качестве его выходных данных. С точки зрения функционирования этой магической команды получается, что это %writefile, только наоборот.
Держись крепче! Впереди еще много удивительного «волшебства».
Список всех переменных
Эта магическая команда выдает список всех глобальных переменных, используемых в вашем блокноте.
Ниже приведены 3 переменные — 2 строки и 1 целое число. Если мы используем %who, она перечислит все 3 переменные, которые мы задали.
a = “hello”
b = “Good Morning”
c = 1

Приведенный выше код отображает все переменные независимо от их типа.

Для того чтобы получить переменные определенного типа, мы должны указать этот тип после магической команды. Приведенный выше код отображает все переменные строкового типа в качестве выходных данных.
Обмен переменными между блокнотами
Эта волшебная команда позволяет вам хранить любую переменную и использовать ее в различных блокнотах Jupyter.
Чтобы извлечь переменную, вам нужно ввести ту же команду с параметром ‘-r’.
Вот так выглядит первый блокнот:

Код, необходимый для извлечения этих данных, записан в другом блокноте.

Это самый простой способ обмена данными любого типа между различными блокнотами.
Выполнение html-скрипта
%% html позволяет нам писать html-код в ячейке. Теперь ячейка будет действовать как html-редактор с html-выводом ячейки.
Следующий код состоит из простой таблицы, созданной в формате html. Заметьте, что html-вывод отображает ожидаемую таблицу.
%%html
<html>
<body>
<table>
<tr>
<th>Name</th>
<th>Country</th>
<th>Age</th>
</tr>
<tr>
<td>Sid</td>
<td>India</td>
<td>22</td>
</tr>
<tr>
<td>Dave</td>
<td>UK</td>
<td>28</td>
</tr>
</table>
</body>
</html>

Совет: вы можете запустить код JavaScript в ячейке с помощью команды % %js magic, аналогичной магической команде HTML.
Отображение графиков Matplotlib
%matplotlib inline — это самая популярная магическая команда. Она позволяет отображать в блокнотах графики Matplotlib. Эта команда активирует интерактивную поддержку Matplotlib для блокнота Jupyter.
import random
import matplotlib.pyplot as plt
%matplotlib inline
Мы импортировали несколько библиотек, чтобы показать, как работает команда.
Теперь создадим два случайных списка для построения графика:
a = []
b = []
for i in range(10):
a.append(random.randint(0,10))
b.append(random.randint(0,10))
Далее мы построим диаграмму рассеяния данных:
plt.scatter(a,b)

Магическая команда %matplotlib inline позволяет визуализировать график внутри блокнота Jupyter.
Переменные среды
Эта волшебная команда позволяет вам сделать 3 вещи — вывести список всех переменных в среде, получить значение конкретной переменной среды и установить значение переменной.

%env без переменной будет перечислять все переменные среды.

%env с одной переменной вернет значение для указанного параметра.
%env variable value задаст значение для указанного имени переменной.
Подробная информация об объекте
%pinfo предоставляет подробную информацию об объекте, который передается вместе с ним. Она похожа на функцию object?.
В следующем фрагменте я указал простую строку “a” вместе с %pinfo, чтобы получить подробную информацию о ней.
a = "The World Makes Sense!"
%pinfo a

В приведенных выше выходных данных %pinfo предоставляет всю информацию о строке.
Вы можете посмотреть весь список магических команд, используя команду “%lsmagic”.
%lsmagic

На мой взгляд это были лучшие 10 магических команд, которые могут улучшить вашу продуктивность и сэкономить время.
Надеюсь, вам понравилось!
Читайте также:
- Nota Bene для программиста Python
- Почему Python не станет языком программирования будущего
- Изучаем Python: генераторы, стримы и yield
Перевод статьи Siddhesh Jadhav: Top 10 Magic Commands in Python to Boost your Productivity.