14. Интерактивное редактирование ввода и замена истории

Некоторые версии интерпретатора Python поддерживают редактирование текущей строки ввода и подстановку истории, подобно средствам, присутствующим в оболочке Korn и оболочке GNU Bash. Для этого используется библиотека GNU Readline, которая поддерживает различные стили редактирования. У этой библиотеки есть своя документация, которую мы не будем здесь дублировать.

14.1. Завершение вкладки и редактирование истории

Завершение имен переменных и модулей происходит automatically enabled при запуске интерпретатора, так что нажатие клавиши Tab вызывает функцию завершения; она просматривает имена операторов Python, текущие локальные переменные и доступные имена модулей. Для выражений с точками, таких как string.a, она оценивает выражение до конечного '.', а затем предлагает завершения из атрибутов результирующего объекта. Обратите внимание, что это может привести к выполнению кода, определяемого приложением, если в выражении присутствует объект с методом __getattr__(). Конфигурация по умолчанию также сохраняет историю в файл с именем .python_history в каталоге пользователя. История будет снова доступна во время следующего интерактивного сеанса интерпретатора.

14.2. Альтернативы интерактивному переводчику

Эта возможность - огромный шаг вперед по сравнению с предыдущими версиями интерпретатора, однако некоторые пожелания все же остались: Было бы неплохо, если бы в строках продолжения предлагался правильный отступ (синтаксический анализатор знает, нужен ли следующий токен отступа). Механизм завершения может использовать таблицу символов интерпретатора. Также была бы полезна команда, проверяющая (или даже предлагающая) совпадение скобок, кавычек и т. д.

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