Python не только самый универсальный язык программирования, но и самый гибкий, когда речь заходит об интеграции новых функций. Магические команды являются одной из таких важных функций, добавленных в стандартную оболочку Python.
Что же такое магические команды Python?
Магические команды — это улучшения, добавляемые поверх обычного кода на Python, их предоставляет ядро IPython.
Эти команды обычно начинаются с символа “%”
Магические команды были преимущественно добавлены для решения распространенных проблем, с которыми сталкиваются пользователи. Также в командной оболочке IPython есть несколько сочетаний горячих клавиш, которые значительно облегчат вам работу.
Существует 2 типа магических команд: строчные, обозначенные одним символом %, и ячеечные, обозначенные двойным символом % %.
Префикс % означает, что команда работает на одной строке кода, в то время как префикс %% позволяет команде работать над всей ячейкой.
Ниже приведен список магических команд и примеры их использования в блокнотах Jupyter.
Выполнение внешнего кода
Любой внешний код Python из блокнота Jupyter можно запускать с помощью команды %run.
![](https://cdn-images-1.medium.com/max/640/0*4poJG9b00BSNBy3G.png)
Файл myCode.py на изображении выше содержит простой скрипт, который выводит предложение “The world makes sense!».
![](https://cdn-images-1.medium.com/max/640/0*nyakbG88gz75zM-p.png)
Если мы введем команду %run, а после нее зададим имя файла, она выполнит код, который содержится в указанном файле.
Примечание: %run также позволяет выполнять код из других блокнотов Jupyter.
Время работы кода
Вы никогда не задумывались, сколько именно времени занимает работа кода в рамках одной ячейки?
Магическая команда time позволяет получить всю необходимую информацию о времени.
Поскольку здесь мы будем иметь дело со всей ячейкой, мы будем использовать %% в качестве префикса перед ключевым словом time.
![](https://cdn-images-1.medium.com/max/640/0*XEiYlfpAd8yaxR4f.png)
Ячейка на примере выше включает в себя цикл for со случайным вычислением. %%time помогает узнать время, необходимое для перебора в цикле for.
Копирование содержимого во внешний файл
В большинстве случаев возникает необходимость скопировать содержимое вашей ячейки в скрипт python или текстовый файл непосредственно из вашего блокнота Jupyter.
Вместо того чтобы копировать все и создавать новый файл, вы можете напрямую экспортировать свои данные, добавив команду writefile в ячейку перед кодом.
Обратите внимание на двойной % перед командой, который говорит о том, что будет экспортировано содержимое всей ячейки.
![](https://cdn-images-1.medium.com/max/640/0*t4kvb6Vkit0knE1e.png)
Поскольку у меня уже был создан файл с некоторым кодом, этот код выводит «Overwriting myCode.py» (Перезапись файла). Это говорит о том, что исходное содержимое будет заменено кодом, показанным на изображении выше.
Просмотр содержимого внешнего файла
Часто вам может понадобиться скопировать в свой код несколько строк кода из внешнего файла. Команда %pycat избавит вас от долгой процедуры извлечения определенных данных из файла и их копирования в другой файл. Она позволяет просматривать содержимое любого файла в любом каталоге.
![](https://cdn-images-1.medium.com/max/640/0*436yuMgm1xvCclYg.png)
Содержимое внешнего файла отображается в качестве его выходных данных. С точки зрения функционирования этой магической команды получается, что это %writefile, только наоборот.
Держись крепче! Впереди еще много удивительного «волшебства».
Список всех переменных
Эта магическая команда выдает список всех глобальных переменных, используемых в вашем блокноте.
Ниже приведены 3 переменные — 2 строки и 1 целое число. Если мы используем %who, она перечислит все 3 переменные, которые мы задали.
a = “hello”
b = “Good Morning”
c = 1
![](https://cdn-images-1.medium.com/max/640/0*fOMNkVNWPMi2WG8e.png)
Приведенный выше код отображает все переменные независимо от их типа.
![](https://cdn-images-1.medium.com/max/640/0*CLF1k0z6kWltQwgM.png)
Для того чтобы получить переменные определенного типа, мы должны указать этот тип после магической команды. Приведенный выше код отображает все переменные строкового типа в качестве выходных данных.
Обмен переменными между блокнотами
Эта волшебная команда позволяет вам хранить любую переменную и использовать ее в различных блокнотах Jupyter.
Чтобы извлечь переменную, вам нужно ввести ту же команду с параметром ‘-r’.
Вот так выглядит первый блокнот:
![](https://cdn-images-1.medium.com/max/640/0*UUjDN8eQQ6Crrb6R.png)
Код, необходимый для извлечения этих данных, записан в другом блокноте.
![](https://cdn-images-1.medium.com/max/640/0*Tlz2NF4_cbQF6LiS.png)
Это самый простой способ обмена данными любого типа между различными блокнотами.
Выполнение 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>
![](https://cdn-images-1.medium.com/max/640/0*9rDdVjtnorUXIVRN.png)
Совет: вы можете запустить код 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)
![](https://cdn-images-1.medium.com/max/640/0*yAyo7tbOcIjMlcuv.png)
Магическая команда %matplotlib inline позволяет визуализировать график внутри блокнота Jupyter.
Переменные среды
Эта волшебная команда позволяет вам сделать 3 вещи — вывести список всех переменных в среде, получить значение конкретной переменной среды и установить значение переменной.
![](https://cdn-images-1.medium.com/max/640/0*FQj0pASKqRegNyFQ.png)
%env без переменной будет перечислять все переменные среды.
![](https://cdn-images-1.medium.com/max/640/0*_z2knDnwzxSP4JuU.png)
%env с одной переменной вернет значение для указанного параметра.
%env variable value задаст значение для указанного имени переменной.
Подробная информация об объекте
%pinfo предоставляет подробную информацию об объекте, который передается вместе с ним. Она похожа на функцию object?.
В следующем фрагменте я указал простую строку “a” вместе с %pinfo, чтобы получить подробную информацию о ней.
a = "The World Makes Sense!"
%pinfo a
![](https://cdn-images-1.medium.com/max/640/0*fbCkbMISl7gfIazz.png)
В приведенных выше выходных данных %pinfo предоставляет всю информацию о строке.
Вы можете посмотреть весь список магических команд, используя команду “%lsmagic”.
%lsmagic
![](https://cdn-images-1.medium.com/max/640/0*WmDUGcG1yKy34VdE.png)
На мой взгляд это были лучшие 10 магических команд, которые могут улучшить вашу продуктивность и сэкономить время.
Надеюсь, вам понравилось!
Читайте также:
- Nota Bene для программиста Python
- Почему Python не станет языком программирования будущего
- Изучаем Python: генераторы, стримы и yield
Перевод статьи Siddhesh Jadhav: Top 10 Magic Commands in Python to Boost your Productivity.