Откройте для себя волшебный набор инструментов IPython для вашего путешествия по программированию

Оглавление

Когда вы выполняете код на Python, стандартная оболочка Python, которая поставляется с вашей установкой на Python, является естественным инструментом для использования. Однако по мере продвижения по пути программирования вы можете обнаружить, что вам требуются более мощные функциональные возможности, чем те, которые предлагает стандартный REPL. К счастью, IPython предлагает расширенную версию интерактивного Python, которая может значительно расширить ваши возможности.

Использование оболочки IPython - это быстрый способ изучения Python и выполнения кода без использования полноценной интегрированной среды разработки (IDE), такой как PyCharm. IPython расширяет возможности работы с Python благодаря волшебным командам, которых нет в стандартной оболочке Python. Они могут помочь вам быстрее выполнять задачи.

В этом руководстве вы узнаете:

  • Ознакомьтесь с основными аспектами и функциональностью оболочки IPython
  • Напишите и выполните код в IPython
  • Интегрируйте IPython в свои Скрипты на Python
  • Используйте волшебные команды IPython в своих сессиях программирования
  • Узнайте, как постоянно сохранять ваши сеансы в файле Python

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

Бесплатный бонус: Нажмите здесь, чтобы загрузить ресурсы по коду и шпаргалку, чтобы вы могли творить чудеса с IPython.

Установите и запустите IPython на своем компьютере

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

Примечание: IPython поставляется вместе с пакетом Anaconda. Если вы установили полный пакет Anaconda, то у вас уже есть IPython.

Чтобы установить IPython, используйте pip в командной строке:

(venv) C:\Users\User>python -m pip install ipython

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

После завершения процесса установки вы можете запустить интерактивную оболочку, выполнив команду ipython в командной строке:

C:\Users\User>ipython
Python 3.11.4 (main, Jun 27 2023, 11:06:35) [Clang 14.0.0 (clang-1400.0.29.202)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.14.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

В начале сеанса вы увидите приведенное выше сообщение, подтверждающее успешную установку IPython на ваш компьютер. Оболочка инициирует первое приглашение , а In [1] указывает на то, что она готова принять вводимые данные.

Чтобы выйти из интерактивной оболочки, вы можете использовать команду exit и переключиться с IPython на командную строку. Теперь, когда у вас запущен IPython, вы готовы изучить, как он может преобразовать ваш рабочий процесс на Python. Об этом вы узнаете далее.

Улучшите свой интерактивный рабочий процесс на Python С помощью IPython

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

  1. Пронумерованные подсказки помогут вам лучше понять вводимый код и выходные результаты.
  2. В IPython так много волшебных команд, которых нет в стандартной оболочке Python, и они делают работу в оболочке эффективной.
  3. Вы можете получить доступ к истории своего кода в командной оболочке.
  4. Это делает доступным самоанализ объекта и документацию по коду.

Эти преимущества могут существенно изменить вашу жизнь как программиста. В следующих разделах вы познакомитесь с этими инструментами повышения производительности.

IPython также доступен через Jupyter Notebooks. Этот интерактивный интерфейс на основе браузера предлагает аналогичные функции, такие как волшебные команды и нумерованный ввод и вывод данных. Его двухпроцессная модель разделяет интерфейсный и серверный компоненты IPython на отдельные процессы. Это позволяет ядру IPython функционировать независимо и управлять выполнением кода, управлением пространством имен и взаимодействием между оболочкой и ядром.

Примечание: IPython - не единственная интерактивная оболочка, которую вы можете использовать. В Python-версии множество вариантов, и вы можете выбрать свою любимую оболочку из bpython, ptpython, IDLE и других.

Стандартная оболочка Python позволяет взаимодействовать с Python в командной строке. Она позволяет вводить инструкции или выражения по одному за раз.

В приведенных выше примерах кода вы можете определить две переменные, first_name и last_name, а затем объединить две строки. Вы можете создавать мини-программы в оболочке Python, создавая другие объекты, такие как функции и объекты класса.

Интерактивная оболочка IPython работает аналогично оболочке Python, но предлагает иную компоновку кода. Ее интерфейс более выразителен, чем у оболочки Python, благодаря пронумерованным подсказкам для ввода и вывода.

Как указано выше, вы запускаете новый сеанс IPython с помощью команды ipython. Затем вы можете создавать переменные в командной строке. IPython нумерует переменные, которые вы определили. Кроме того, объединение двух переменных привело к появлению подсказки Out. Расположение кода более читабельно благодаря пробелу, разделяющему подсказки.

Но что именно означают эти цифры? Далее вы познакомитесь с подсказками IPython для ввода и вывода, которые являются одной из его ключевых отличительных особенностей.

Понимание инструкций по вводу и выводу данных

Одним из наиболее заметных различий между оболочкой IPython и стандартной оболочкой Python является нумерация входов и выходов. Вы можете назвать их входные и выходные подсказки. Подсказка состоит из одной или нескольких строк кода в качестве входных данных. Если вы получите выходные данные, то они будут иметь тот же номер запроса, что и соответствующие входные данные.

Чтобы отобразить пронумерованные входные и выходные данные, определите профиль сотрудника, создав следующие переменные:

In [1]: first_name = "Han"

In [2]: last_name = "Solo"

In [3]: department = "Accounts"

In [4]: f"{first_name} {last_name} works in {department}"
Out[4]: 'Han Solo works in Accounts'

В подсказках 1, 2 и 3 вы определяете переменные first_name, last_name, и department для сотрудника Хана Соло. Эти три строки служат в качестве подсказок для ввода, в которых вы можете ввести или определить переменные.

В командной строке 4 вы используете f-строку для объединения значений переменных. В результате будет выведена строка вывода, отображающая результат объединения. Выходные строки отображают результаты выполненного кода или вычислений.

Примечание: В IPython вы можете получить доступ к двум специальным переменным, In и Out, чтобы получить список всего введенного вами кода на Python и соответствующих выходных данных .

Сравните оболочку IPython со стандартным интерфейсом оболочки Python:

>>> first_name = "Han"
>>> last_name = "Solo"
>>> department = "Accounts"
>>> f"{first_name} {last_name} works in {department}"
'Han Solo works in Accounts'

Стандартная оболочка Python не имеет пронумерованных подсказок для ввода и вывода. Вместо этого она использует >>> для представления подсказок. Несмотря на то, что это не мешает написанию и выполнению кода, интерактивная оболочка имеет более понятный интерфейс с помощью подсказок ввода и вывода.

Примечание: Позже вы узнаете о волшебных командах в Python. Они ведут себя немного по-другому, поскольку не генерируют запрос кода с выводом. Вместо этого в выходных данных обычно отображаются возвращаемые значения выполненного кода.

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

Использование вкладки Завершение

Прежде чем вы начнете изучать функциональность интерактивной оболочки, вам нужно будет ознакомиться с поддержкой IPython для завершения работы с вкладками, которая сильно отличается от того, что предлагает стандартная оболочка. Оболочка IPython предлагает завершение работы с табуляцией для любого объекта, когда вы вводите первые несколько символов его названия и нажимаете клавишу Tab.

В приглашении 5 вы вводите первую букву переменной department. Когда вы нажимаете Tab, отображаются все встроенные и пользовательские объекты, начинающиеся с этой буквы, и вы можете использовать Up, Вниз, Влево и Вправо клавиши для выбора той, которая вы собираетесь использовать. Затем вы нажимаете кнопку Введите, чтобы загрузить объект.

С другой стороны, стандартная оболочка Python отображала бы статический список совпадающих символов после двойного нажатия клавиши Tab.

При работе с большими библиотеками или кодовыми базами заполнение вкладок может быть эффективным инструментом, поскольку вам не придется прокручивать страницу назад, чтобы запомнить точные названия функций или переменных, если вы знаете, какой объект хотите использовать. Это может сэкономить время и повысить производительность, а также уменьшить количество ошибок.

Применение многострочного кода в IPython

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

В стандартной оболочке Python вам придется вручную делать отступы в каждой строке блока кода с правильным количеством пробелов. Например, вот как вы определяете функцию salary_increment(), которая добавляет 10-процентную надбавку к зарплате сотрудника в стандартной оболочке Python.

Вам необходимо вручную добавить четыре пробела, чтобы соответствовать правилам отступов в Python при определении функции. Если вы забудете применить отступ, то ваш код выдаст ошибку , и вам придется определять функцию заново.

В IPython все по-другому, он автоматически применяет отступы ко второй и последующим строкам определения функции.

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

Встраивать IPython в скрипты

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

Для этого вы будете использовать функцию embed() из модуля IPython для запуска интерактивного сеанса. Напишите следующий код в файле Python с именем employee.py:

 1# employee.py
 2
 3import IPython
 4
 5first_name = "Han"
 6last_name = "Solo"
 7department = "Accounts"
 8print(f"{first_name} {last_name}")
 9
10IPython.embed()
11
12salary = 1000

Обратите внимание на IPython.embed() в строке 10. Эта функция запустит сеанс IPython, как только выполнение достигнет этой строки.

Теперь запустите файл employee.py, как если бы вы запускали любой скрипт на Python. Python будет выполнять все строки кода, пока не достигнет вызова embed(). Затем вы войдете в оболочку IPython:

C:\Users\User>python employee.py
Han Solo
Python 3.11.4 (main, Jun 27 2023, 11:06:35) [Clang 14.0.0 (clang-1400.0.29.202)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.14.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: first_name
Out[1]: 'Han'

In [2]: last_name
Out[2]: 'Solo'

In [3]: salary
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Input In [3], in <cell line: 1>()
----> 1 salary

NameError: name 'salary' is not defined

Вызов функции print() из строки 8 в вашем скрипте выполняется и выводит результат Han Solo на ваш терминал. Затем запускается интерактивная оболочка. Чтобы увидеть ее в действии, вам нужно получить доступ к некоторым переменным из вашего файла.

В подсказках 1 и 2 переменные first_name и last_name, которые вы определили в файле employee.py, доступны в пространстве имен. Однако переменные, которые вы определили после функции embed(), например salary, недоступны в пространстве имен, как вы можете видеть в подсказке 3. Это гарантирует, что вы будете работать только с переменными, которые хотите импортировать в свое пространство имен.

Примечание: Чтобы открыть стандартную оболочку Python после выполнения вашего скрипта, вы можете использовать опцию интерпретатора -i:

C:\Users\User>python -i employee.py

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

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

Станьте опытным пользователем с помощью волшебных Команд IPython

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

Команды Magic обычно начинаются со знака процента (%). Добавление к команде одного знака процента приведет к тому, что команда будет применена к одной строке вашего кода. Однако, если вы используете двойной знак процента (%%),, команда будет применена ко всему приглашению, которое может состоять из более чем одной строки кода и тогда будет называться ячейкой.

Примечание: В этом руководстве вы узнаете о важных командах magic линейного уровня. Вы можете узнать больше о волшебных командах на уровне ячеек с двойным знаком процента в документации IPython.

У вас есть возможность не использовать префикс процента в командах magic. Для начинающих рекомендуется использовать его в любом случае, поскольку он делает команды понятными в ваших подсказках, гарантируя, что последовательность выполнения кода имеет смысл. Однако вы можете обойтись без него, как только освоитесь с командами IPython. Позже вы узнаете, как включать и выключать префикс magic command.

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

В оболочке IPython вы можете перемещаться по своей файловой системе точно так же, как в обычной оболочке Unix. С помощью команды %pwd вы можете отобразить, где вы в данный момент находитесь в файловой системе. Это похоже на UNIX и встроенная раковина pwd команда:

In [1]: %pwd
Out[1]: '/Users/vincentmatinde'

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

Чтобы просмотреть список файлов и каталогов, находящихся в вашем текущем местоположении, вы можете использовать команду %ls:

In [2]: %ls
Applications/   Downloads/    Movies/       Pictures/
Desktop/     Public/    Documents/    Library/

Команда %ls выводит список всех каталогов в пределах вашего текущего местоположения, что полезно для быстрого просмотра содержимого каталога, не выходя из среды IPython.

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

In [3]: %cd Documents
/Users/vincentmatinde/Documents

Здесь вы переходите в папку Documents. Обратите внимание, что в приглашении указан путь к файлу, чтобы показать, что ваша команда выполнена успешно.

Комбинируя три команды для перемещения по файловой системе вашего компьютера, интерактивная оболочка упрощает поиск файлов или папок.

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

Рабочие каталоги с закладками

Если вы хотите перейти в нужный вам каталог, не просматривая свою файловую структуру, то вам пригодится функция закладки. Например, вы можете добавить в закладки папку, содержащую ваш файл employee.py. Для создания закладки используется синтаксис %bookmark <bookmark-name> <directory>:

In [1]: %bookmark Employees /Users/vincentmatinde/Documents/Employees

Здесь вы создали закладку Employees, соответствующую названию соответствующей папки. Обратите внимание, что вы указали путь к папке, которую хотите добавить в закладки.

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

После создания закладки вы можете перейти к этой папке, независимо от вашего текущего местоположения, с помощью команды %cd -b Employee:

In [2]: %cd -b Employees
(bookmark: Employees -> /Users/vincentmatinde/Documents/Employees
/Users/vincentmatinde/Documents/Employees

In [3]: %pwd
Out[4]: '/Users/vincentmatinde/Documents/Employees

Когда вы перейдете к каталогу, который вы добавили в закладки, вы можете подтвердить свое местоположение с помощью команды %pwd, как вы это делали в приглашении 3.

У вас может быть столько закладок, сколько вы захотите. Используйте те же команды, что и выше, для создания других закладок, таких как Contacts и Departments. Чтобы просмотреть список всех ваших закладок, используйте команду %bookmark -l:

In [5]: %bookmark -l
Current bookmarks:
Contacts    -> /Users/vincentmatinde/Documents/Contacts
Departments -> /Users/vincentmatinde/Documents/Departments
Employees   -> /Users/vincentmatinde/Documents/Employees

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

Наконец, если вы хотите удалить какие-либо закладки, вы можете использовать команду %bookmark, за которой следует флажок -d для удалить, и название закладки:

In [6]: %bookmark -d Contacts

In [7]: %bookmark -l
Current bookmarks:
Departments -> /Users/vincentmatinde/Documents/Departments
Employees   -> /Users/vincentmatinde/Documents/Employees

Нет явного подтверждения того, что вы удалили целевую закладку. Однако, когда вы проверяете список закладок в командной строке 7, он больше недоступен, поскольку вы удалили его из пространства имен.

Рекомендуется присваивать закладкам названия в соответствии с проектом, над которым вы работаете. Наличие нескольких закладок может привести к путанице в вашем пространстве имен, если они не будут помечены соответствующим образом.

Загрузка входных данных файла в сеанс командной Строки

Помните, как вы можете загрузить IPython в свой скрипт на Python? Ну, вы также можете пойти другим путем и загрузить содержимое файла на Python в интерактивную оболочку. Команда %load загружает содержимое файла в сессию IPython. Это означает, что у вас не возникнет проблем с копированием и вставкой кода из файла в вашу интерактивную сессию.

Запустите новый сеанс IPython и используйте файл employee.py, который вы создали ранее. Чтобы избежать путаницы, удалите импорт IPython и строку IPython.embed(). Ваш файл должен выглядеть следующим образом:

# employee.py

first_name = "Han"
last_name = "Solo"
department = "Accounts"
salary = 1000

Убедитесь, что вы находитесь в каталоге, в котором находится файл, который вы хотите загрузить, или укажите путь к нему. Чтобы загрузить содержимое файла в сессию IPython, вы используете команду %load:

In [1]: %load employee.py

In [2]: # %load employee.py
   ...: first_name = "Han"
   ...: last_name = "Solo"
   ...: department = "Accounts"
   ...: salary = 1000
   ...:

In [3]: first_name
Out[3]: 'Han'

In [4]: last_name
Out[4]: 'Solo'

С помощью одной команды вы загрузили содержимое файла Python и теперь можете использовать его в своей сессии. Все переменные из файла теперь доступны в пространстве имен сессии, как вы подтверждаете в подсказках 3 и 4. Это еще один практичный способ протестировать переменные и функции, которые вы определили в других файлах Python, и поиграть с ними.

Примечание: Будьте осторожны при повторном запуске запроса, содержащего команду %load. Например, если вы загружаете данные из внешнего файла и изменяете их в командной строке, то повторный запуск запроса с помощью команды %load приведет к перезагрузке старого кода. Это может привести к непредвиденным сложностям в вашем рабочем процессе.

Далее вы узнаете, как вывести список всех переменных, определенных в пространстве имен, что даст вам общее представление о переменных, которые в данный момент присутствуют и доступны в вашем коде.

Список переменных в пространстве имен

Помимо использования табуляции для вывода списка переменных, у вас есть возможность использовать команды %who или %whos для получения дополнительной информации о переменных, которые вы определили самостоятельно. При заполнении вкладки отображаются все объекты, независимо от того, являются ли они системными или пользовательскими. С другой стороны, команда %who содержит конкретный список ваших переменных.

Ниже интерактивная оболочка предоставляет вам список переменных, которые вы определили ранее:

In [5]: %who
department   first_name  last_name   salary

В командной строке 5 команда %who выводит список всех ранее определенных переменных. Важно отметить, что переменные перечислены в алфавитном порядке. Эта команда служит удобным способом проверки переменных, которые вы уже определили в своем пространстве имен.

Однако могут быть случаи, когда одной этой информации недостаточно. Вот почему команда %whos предоставит более полезную информацию о переменных, которые вы определили в своем сеансе:

In [6]: %whos
Variable     Type    Data/Info
------------------------------
department   str     Accounts
first_name   str     Han
last_name    str     Solo
salary       int     1000

Теперь вы можете изучить тип и соответствующее значение каждой переменной, что позволит вам определить типы переменных. Эта информация поможет вам эффективно работать с переменными.

Очистка переменных в IPython

Вы можете сбросить параметры переменных или, в идеале, удалить их из своего пространства имен с помощью команды %reset_selective. Вы можете сделать это, добавив имя объекта или переменной в качестве аргумента. Придерживаясь предыдущего кода, вы можете настроить таргетинг на переменную salary:

In [7]: %reset_selective salary
Once deleted, variables cannot be recovered. Proceed (y/[n])?  y

In [8]: salary
--------------------------------------------------------------------
NameError                          Traceback (most recent call last)
<ipython-input-10-55b5c721c8d2> in <module>
----> 1 salary

NameError: name 'salary' is not defined

Когда вы используете команду %reset_selective для переменной salary, вы удаляете ее из пространства имен. Вы получите запрос с подтверждением для продолжения удаления. В приглашении 8, когда вы пытаетесь получить доступ к переменной salary, это приводит к NameError.

Если вы хотите начать сеанс с чистого листа, не закрывая командную строку и не выходя из интерактивной оболочки, вы можете очистить переменные в пространстве имен с помощью команды %reset. Эта команда удалит все пользовательские переменные, функции и импортированные модули , поэтому будьте осторожны при запуске этой команды:

In [9]: %reset
Once deleted, variables cannot be recovered. Proceed (y/[n])? y

In [10]: %who
Interactive namespace is empty.

Команда %reset удалила все переменные в сеансе. В командной строке 10 при использовании команды %who появляется сообщение о том, что интерактивное пространство имен пусто. Теперь вы можете определять новые переменные в пространстве имен.

Вы также можете использовать команду сброса с флагом -f, который означает принудительно, чтобы обойти этап подтверждения. Команда %reset -f удалит переменные в сеансе без запроса подтверждения, поэтому используйте ее с осторожностью.

История сканирования кода

Иногда полезно вернуться к предыдущему коду, но разбор всех входных и выходных данных может оказаться рутинной работой. В IPython есть удобная волшебная команда %history, которая отображает ранее выполненные команды в текущем сеансе. Она позволяет просматривать предыдущие команды и получать к ним доступ, что делает ее удобной для вызова фрагментов:

In [11]: %history -n
   1: %load employee.py
   2:
# %load employee.py
# employee.py

first_name = "Han"
last_name = "Solo"
department = "Accounts"
salary = 1000
   3: first_name
   4: last_name
   5: %who
   6: %whos
   7: %reset_selective salary
   8: salary
   9: %reset
  10: %who
  11: %history -n

При выполнении команды %history без каких-либо аргументов будут отображены все команды, включая входные данные, которые вы использовали до сих пор. Однако номера подсказок кода отображаться не будут. Когда вы используете необязательный параметр -n, он будет перечислять отображаемые записи, что облегчит вам обращение к предыдущим командам позже.

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

In [12]: %history 7
%reset_selective salary

Вы получили доступ к предыдущему вводу из подсказки 7, где вы вызывали %reset_selective для переменной salary. Если вы хотите повторно запустить определенный блок кода, то вы можете использовать команду %recall, которая перезагружает указанное приглашение и выполняет его содержимое. Но сначала загрузите файл employee.py, чтобы вернуть все переменные в пространство имен. Вы можете перечислить их, чтобы получить пример кода, который вы можете вызвать снова:

In [13]: %load employee.py

In [14]: # %load employee.py
    ...: first_name = "Han"
    ...: last_name = "Solo"
    ...: department = "Accounts"
    ...: salary = 1000
    ...:

In [15]: first_name
Out[15]: 'Han'

In [16]: last_name
Out[16]: 'Solo'

In [17]: department
Out[17]: 'Accounts'

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

In [18]: %recall 15

In [19]: first_name
Out[19]: 'Han'

Как только вы вспомните подсказку 15, код будет доступен для использования в следующей строке. Это может работать и с другими объектами, такими как функции, если вы хотите использовать их повторно. Эта команда поддерживает принцип разработки программного обеспечения Не повторяйтесь (DRY), поскольку вы вызываете переменную, не переписывая ее заново.

Иногда бывает трудно запомнить содержимое предыдущего приглашения. Однако вы можете сохранить важные приглашения в памяти, если знаете, что будете использовать их повторно в течение всего сеанса. Тогда их повторное использование может сэкономить время.

Очистка рабочего пространства

Длительная работа в командной оболочке может привести к тому, что в вашем IPython-сеансе будет много кода. Но что, если вы хотите убрать беспорядок и начать с чистого экрана? Вот тут-то и вступает в действие еще одна волшебная команда. Чтобы очистить выходные данные текущего сеанса IPython, вы можете использовать другую волшебную команду. Эта команда удобна, когда вы хотите убрать беспорядок и начать с чистого экрана.

Команда может использоваться по-разному в зависимости от того, работаете ли вы в системе Windows или Unix:

В системах Windows используется команда %cls, которая использует встроенную команду cls в терминале Windows для очистки экрана.

В системах на базе Unix, таких как Linux и macOS, вы можете использовать %clear для очистки экрана. При запуске программа очищает выходные данные и открывает новую рабочую область.

После выполнения команды magic вы заметите, что предыдущий вывод из вашей сессии IPython больше не отображается.

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

Сохранение переменных в сеансах

Когда вам нужно сохранить данные между двумя сеансами, не сохраняя их в файл Python, может помочь команда %store. Вам не придется повторно вводить все ваши переменные и объекты при запуске нового сеанса.

Чтобы сохранить переменную, вы можете использовать команду %store, а затем имя переменной:

In [20]: %store first_name
Stored 'first_name' (str)

In [21]: exit

В этом примере вы сохраняете переменную first_name и затем выходите из интерактивной оболочки в командной строке 21. Когда вы начинаете новый сеанс, вы должны быть готовы к работе, не так ли? Но посмотрите, что произойдет, когда вы попытаетесь получить доступ к first_name в новом сеансе:

In [1]: first_name
--------------------------------------------------------------------
NameError                          Traceback (most recent call last)
Input In [1], in <cell line: 1>()
----> 1 first_name

NameError: name 'first_name' is not defined

Вы получите значение NameError. Это имело бы смысл, если бы вы не сохранили переменную, но сохранили ее для доступа между сеансами с помощью команды %store. Однако есть соответствующая команда, которую вам нужно использовать для восстановления переменной в новом сеансе:

In [2]: %store -r

In [3]: first_name
Out[3]: 'Han'

В вашем новом сеансе вы восстановили переменную, используя команду %store с флагом -r для перезагрузки. В приглашении 3 вы подтверждаете, что переменная first_name теперь доступна в новом пространстве имен.

Вы также можете связать несколько переменных, которые вы хотели бы сохранить между сеансами, если у вас есть определенные переменные, имеющие решающее значение для вашего проекта. Добавьте переменные last_name, department, и salary, а затем вызовите %store:

In [4]: last_name = "Solo"

In [5]: department = "Accounts"

In [6]: salary = 1000

In [7]: %store last_name department salary
Stored 'last_name' (str)
Stored 'department' (str)
Stored 'salary' (int)

После того, как вы запустите команду %store со всеми переменными, которые вы хотели бы сохранить, терминал выведет список всех сохраненных переменных для вашей информации и их типов. Затем вы можете использовать команду %store -r для восстановления всех переменных в новом сеансе. Вызов %store в новом сеансе без каких-либо переменных приведет только к отображению всех сохраненных переменных.

Вы можете удалить переменную из хранилища, используя синтаксис %store -d <variable_name>. С помощью этой команды вы можете удалить из хранилища любую переменную, которую вы не хотите сохранять между сеансами.

Понимание объектов посредством самоанализа

Самоанализ объектов - одна из заметных сильных сторон IPython. Используя суффикс ? или ?? сразу после объекта, такого как переменная или функция, вы можете получить доступ к данным об объекте. Вы также можете сделать это с помощью некоторых команд IPython, чтобы получить представление о них!

Единый ? позволяет быстро просмотреть значения и тип любого объекта и его документацию, предоставляя вам быструю информацию прямо в оболочке IPython. В вашем сеансе IPython добавьте функцию salary_increment(), которую вы определили ранее:

In [8]: def salary_increment(salary):
   ...:     """Calculate the new salary after applying an increment.
   ...:     Args:
   ...:         salary (int): The current salary.
   ...:     Returns:
   ...:         str: A string indicating the new salary after increment.
   ...:     """
   ...:     increment = salary / 10
   ...:     new_salary = increment + salary
   ...:     return f"Your New Salary is: {new_salary}"
   ...:

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

In [9]: salary_increment?
Signature: salary_increment(salary)
Docstring:
Calculate the new salary after applying an increment.
Args:
    salary (int): The current salary.
Returns:
    str: A string indicating the new salary after increment.
File:      c:\users\user\<ipython-input-9-8b992f8ebfc4>
Type:      function

Команда introspection возвращает строку документации, ее обязательные аргументы и другую информацию об объекте. В ней также указывается тип объекта. В данном случае это функция.

Этого может быть достаточно для ваших целей, или, возможно, вам потребуется еще больше информации. С помощью символа ?? вы можете получить доступ к исходному коду и документации:

In [10]: salary_increment??
Signature: salary_increment(salary)
Source:
def salary_increment(salary):
    """
    Calculate the new salary after applying an increment.

    Args:
        salary (int): The current salary.

    Returns:
        str: A string indicating the new salary after increment.
    """
    increment = salary / 10
    new_salary = increment + salary
    return f"Your New Salary is: {new_salary}"
File:      c:\users\user\<ipython-input-9-8b992f8ebfc4>
Type:      function

Теперь вы можете просмотреть исходный код функции в дополнение к строке документации и ввести ее с помощью единственного префикса ?. Это может дать вам более глубокий анализ интересующих вас объектов.

Осваиваясь с оболочкой IPython, вы можете использовать как ?, так и ??, чтобы получить информацию о волшебных командах, с которыми вы познакомились в этом руководстве. Например, вы можете проверить это с помощью команды %who:

In [11]: %who?
Docstring:
Print all interactive variables, with some minimal formatting.

If any arguments are given, only variables whose type matches one of
these are printed.  For example::

  %who function str

will only list functions and strings, excluding all other types of
variables.

(...)

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

Сохранение кода в файл

Вы можете сохранить весь свой код из интерактивной оболочки в файл Python полностью или частично с помощью команды %save. Если вы используете команду с произвольным именем файла, то вы сохраните весь код вашего сеанса в файл. Ниже вы используете файл с именем employee_draft:

In [12]: %save employee_draft
The following commands were written to file `employee_draft.py`:
first_name
get_ipython().run_line_magic('store', '-r')
first_name
last_name = "Solo"
department = "Accounts"
salary = 1000
get_ipython().run_line_magic('store', 'last_name department salary')
def salary_increment(salary):
    """Calculate the new salary after applying an increment.
    Args:
        salary (int): The current salary.
    Returns:
        str: A string indicating the new salary after increment.
    """
    increment = salary / 10
    new_salary = increment + salary
    return f"Your New Salary is: {new_salary}"
get_ipython().run_line_magic('pinfo', 'salary_increment')
get_ipython().run_line_magic('pinfo2', 'salary_increment')
get_ipython().run_line_magic('pinfo', '%who')

Используя команду %save, вы записываете весь свой код в пространстве имен в файл Python с именем, которое вы указали в команде. Обратите внимание, что результирующий файл Python будет расположен в том же каталоге, где вы находитесь в данный момент. Чтобы убедиться, что вы сохранили его в нужном каталоге, воспользуйтесь своим старым знакомым %cd для перехода в нужный каталог или %bookmark, если вы создали закладку для своего проекта.

Вы заметите, что есть ненужные команды, которые могут не иметь отношения к вашему проекту. Например, строки, начинающиеся с get_ipython(), могут оказаться бесполезными. Вы можете удалить эти строки из своего файла и просто сохранить полезный код. Однако есть более простой способ сделать это.

Если вы не хотите сохранять весь свой код в файле Python, то вы можете указать набор подсказок для ввода из вашей сессии, которые вы хотите сохранить в файл:

In [13]: %save employee_draft 4 5 6 8
File `employee_draft.py` exists. Overwrite (y/[N])?  y
The following commands were written to file `employee_draft.py`:
last_name = "Solo"
department = "Accounts"
salary = 1000
def salary_increment(salary):
    """Calculate the new salary after applying an increment.
    Args:
        salary (int): The current salary.
    Returns:
        str: A string indicating the new salary after increment.
    """
    increment = salary / 10
    new_salary = increment + salary
    return f"Your New Salary is: {new_salary}"

В приведенном выше коде вы указали, какие подсказки вы хотели бы сохранить в файл. Это 4, 5, 6, и 8, которые содержат переменные и функцию salary_increment(). Теперь вы не сохраняете в файле ненужный код из IPython. Обратите внимание, что если вы укажете то же имя файла или имя существующего файла, то IPython перезапишет содержимое этого файла.

Включение и выключение префикса Magic Command

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

Однако можно использовать команды и без префикса. Это связано с тем, что по умолчанию команда %automagic имеет значение для , что позволяет использовать команды без магического префикса:

In [14]: history
first_name
%store -r
first_name
last_name = "Solo"
department = "Accounts"
salary = 1000
%store last_name department salary
def salary_increment(salary):
    """Calculate the new salary after applying an increment.
    Args:
        salary (int): The current salary.
    Returns:
        str: A string indicating the new salary after increment.
    """
    increment = salary / 10
    new_salary = increment + salary
    return f"Your New Salary is: {new_salary}"
salary_increment?
salary_increment??
%who?
%save employee_draft
%save employee_draft 4 5 6 8
history

Используя приведенный выше код, вы выполняете команду history без префикса %. Если вы отключили automagic, то получите сообщение об ошибке.

Чтобы указать префикс в процентах, вы можете использовать %automagic off:

In [15]: %automagic off

Automagic is OFF, % prefix IS needed for line magics.

In [16]: history
--------------------------------------------------------------------
NameError                          Traceback (most recent call last)
Input In [19], in <cell line: 1>()
----> 1 history

NameError: name 'history' is not defined

Когда вы отключаете automagic, префикс % требуется для всех команд magic. Если вы не укажете его, то результатом выполнения кода будет NameError, как вы можете видеть выше.

Как вы узнали ранее, рекомендуется использовать префикс, поскольку он отделяет магические команды от вашего кода. Однако вы можете использовать магические команды и без префикса, если вам удобно работать в интерактивной оболочке.

Примечание: Вам нужно проявлять осторожность с именами переменных, если вы используете команды IPython без префикса %. Назначение переменной с тем же именем, что и у команды IPython, может привести к непредвиденным последствиям и неожиданному поведению. Например, если бы вы присвоили переменной history значение, подобное "1895", то вы бы фактически перезаписали встроенную в IPython команду history. Но если вы используете префикс %, то команда будет работать нормально.

Теперь вы получили знания для работы в оболочке IPython, чему способствуют мощные команды magic. Вы определенно ощутите преимущества и мощь, которые IPython предлагает вам как разработчику.

Важно отметить, что в этом руководстве вы изучили лишь несколько волшебных команд. Вы можете изучить больше волшебных команд, обратившись к официальной документации. Если вы хотите ознакомиться с документацией из своей интерактивной оболочки, то вы можете выполнить команду %quickref для получения краткого справочного руководства или команду %magic для получения более подробной информации.

Заключение

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

В этом руководстве вы узнали, как:

  • Установите и запустите IPython на вашем компьютере
  • Отличайте IPython от стандартной оболочки Python
  • Интегрируйте оболочку IPython в свои программы
  • Сохраните ваши сеансы IPython в файле Python
  • Используйте волшебных команд, чтобы активизировать свои занятия программированием и повысить эффективность

Будем надеяться, что интерактивная оболочка IPython воплотит в жизнь все ваши мечты о разработке. Но есть и другие варианты. Возможно, вы также захотите поиграть с bpython и стандартным REPL, чтобы лучше понять эти среды.

Back to Top