Skip to content

Home Администрирование Базовые понятия IPython
Базовые понятия IPython

После того как оболочка IPython будет установлена, и вы в первый раз запустите команду ipython, вы увидите примерно следующее:

После нажатия на клавишу Return IPython выведет следующий текст:

Взаимодействие с IPython

Обычно, когда сталкиваешься с новой командной строкой, в первый момент чувствуешь некоторую беспомощность. Совершенно непонятно - что делать дальше. Помните, как вы в первый раз вошли в систему UNIX и столкнулись с командной оболочкой (ba|k|c|z)sh? Раз уж вы читаете эту книгу, мы полагаем, что у вас уже имеется некоторый опыт работы с командной оболочкой в операционной системе UNIX. Если это действительно так, тогда обрести навыки работы в IPython будет совсем просто.

Одна из причин, по которым непонятно, как действовать делать в оболочке IPython, состоит в том, что она практически не ограничивает

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

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

Пока не видно существенных отличий от стандартной командной оболочки интерпретатора Python, если ввести в ней те же инструкции. Здесь мы просто присвоили значения 1, 2 и 3 переменным a, b и с, соответственно. Самое большое отличие между IPython и стандартной оболочкой Python, которое можно наблюдать здесь, состоит в том, что оболочка IPython выводит порядковый номер строки приглашения к вводу.

Теперь, когда у нас имеется несколько переменных (a, b и с), которым были присвоены значения (1, 2 и 3, соответственно), можно посмотреть, какие именно значения они содержат:

Несмотря на то, что результаты этих двух способов выглядят практически одинаковыми, тем не менее, здесь имеются некоторые разли-

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

чия. Инструкция print использует «неофициальное» строковое представление, тогда как при использовании одного только имени переменной выводится «официальное» строковое представление. Обычно разница между этим двумя представлениями более заметна при работе не со встроенными, а с собственными классами. Ниже приводится пример различий между этими двумя строковыми представлениями:

Здесь с целью демонстрации различий между «официальным» и «не
официальным» строковыми представлениями объекта создается класс
DoubleRep, обладающий двумя методами -__str__ и__rep г . Специаль
ный метод __str__объекта вызывается, когда требуется получить его

«неофициальное» строковое представление. Специальный метод
__repr____ объекта вызывается, когда требуется получить его «офици
альное» строковое представление. После создания экземпляра класса
DoubleRep и присваивания его в качестве значения переменной dr мы
выводим значение dr с помощью инструкции print. Вызывается метод
__str__. Затем в строке приглашения к вводу мы просто вводим имя пе
ременной, в результате чего вызывается метод__герг__. Таким обра
зом, когда мы просто вводим имя переменной, оболочка IPython выво
дит ее «официальное» строковое представление. Когда мы используем
инструкцию print, то получаем «неофициальное» строковое представ
ление. Вообще в языке Python метод__str__вызывается, когда проис
ходит обращение к функции str (obj), которой передается желаемый
объект, или когда он используется в строке форматирования, такой
как эта: "%s" % obj. Когда происходит обращение к функции repr(obj)
или используется строка форматирования, такая как "%r" % obj, вызы
вается метод__герг__.

Как бы то ни было, такой характер поведения не является особенностью исключительно оболочки IPython. Это особенность поведения интерпретатора Python. Ниже приводится тот же самый пример использования класса DoubleRep в стандартной интерактивной оболочке Python:

Вероятно, вы обратили внимание, что строки приглашения к вводу в стандартной оболочке Python и в оболочке IPython отличаются друг от друга. Строка приглашения в стандартной оболочке Python состоит из трех символов «больше» (>>>>), тогда как в IPython приглашение содержит слово «In», за которым следует число в квадратных скобках и двоеточие (In [1]:) . Оказывается, оболочка IPython запоминает команды, которые вводились, и сохраняет их в списке с именем In. Так, после присваивания значений 1, 2 и 3 переменным a, b и с в предыдущем примере содержимое списка In выглядит следующим образом:

Формат вывода результатов в IPython также отличается от вывода в стандартной оболочке Python. Создается впечатление, что оболочка IPython по-разному выводит значения в инструкции print и вычисленные. В действительности же оболочка IPython не делает никаких различий между этими двумя типами. Просто вызовы инструкций print являются побочным эффектом вычислений, поэтому оболочка IPython не видит их и не может их перехватить. Эти побочные проявления инструкции print отражаются только на стандартном потоке вывода std-out, куда передаются результаты запроса. Однако в ходе выполнения программного кода пользователя IPython оболочка контролирует возвращаемые значения. Если возвращаемое значение не равно None, оно выводится в строке с подсказкой Out [число]:.

В стандартной оболочке Python различия между этими двумя способами вывода вообще не видны. Если инструкция, введенная в строке приглашения IPython, вычисляет некоторое значение, отличное от None, оболочка выведет его в строке, которая начинается со слова Out, за которым следует число в квадратных скобках, символ двоеточия и значение, вычисленное инструкцией (например, Out[1]: 1). В следующем примере показано, как в оболочке IPython выполняется присваивание целочисленного значения переменной, как отображается значение переменной в результате ее оценки и как выводится значение этой же переменной с помощью инструкции print. Сначала в оболочке IPython:

А теперь в стандартной оболочке Python:

В действительности нет никаких различий между тем, как в оболочках IPython и Python выполняется присваивание. Обе оболочки немедленно выводят приглашение к вводу. Но «официальное» строковое представление переменной в оболочке IPython и в стандартной оболочке Python отображается по-разному. В оболочке IPython выводится строка-подсказка Out, тогда как в оболочке Python просто выводится значение переменной. В случае же использования инструкции print никаких различий не наблюдается - в обеих оболочках выводится только значение.

Наличие подсказок In [некоторое число]: и Out [некоторое число]: может вызвать вопрос: имеются ли какие-нибудь более глубокие различия между IPython и стандартной оболочкой Python, или они носят исключительно косметический характер. Определенно, различия намного глубже. То есть видимые отличия от стандартной оболочки Python обусловлены функциональными возможностями оболочки IPython.

В оболочке IPython имеются две встроенные переменные, о существовании вам необходимо знать. Это переменные с именами In и Out. Первая из них представляет объект списка, в котором сохраняются введенные команды, а вторая - объект словаря. Вот что сообщает встроенная функция type о каждой из них:

Когда вы начнете пользоваться переменными In и Out, эти различия между ними приобретут особое значение.

Итак, что же хранится в этих переменных?

Как и следовало ожидать, переменные In и Out содержат, соответственно, отличные от None ввод команд и выражений и результаты выполнения инструкций и выражений . Поскольку каждая строка непременно содержит некоторый ввод, определенно имеет смысл сохранять введенные команды в виде такой структуры, как список. Но сохранение вывода в виде списка может привести к появлению элементов, которые содержат только значение None. Поэтому, т. к. не каждая введенная команда возвращает значение, отличное от None, есть смысл сохранять вывод в такой структуре данных, как словарь.

Дополнение

Это позволит вам выполнять такие манипуляции, как показано ниже:

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

После импортирования модулей rlcompleter и readline и настройки параметра дополнения в модуле readline мы оказались в состоянии после импортирования модуля os ввести os. Us, нажать клавишу Tab один раз и получить дополнение до os. listdir. Точно так же, после ввода os.li мы получили список возможных вариантов дополнения, нажав клавишу Tab дважды.

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

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

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

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

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

Комментарии (0)

RSS feed Comments

Написать комментарий

smaller | bigger

busy
 

Регистрация




Top