Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Работа с REPL Python: Настройка окружения

REPL

Python поставляется со встроенным REPL. REPL – это программа, которая работает как командная оболочка (программу REPL ещё называют интерактивным интерпретатором Python), предназначенная для ввода и выполнения кода на языке Python. Акроним REPL расшифровывается так:

  • Read — прочитать ввод от пользователя,
  • Eval — выполнить введённый код,
  • Print — распечатать на экран результат,
  • Loop — снова войти в режим ожидания.

Для запуска REPL достаточно набрать python3. После этого можно выполнять код на Python и сразу же смотреть на результат его выполнения. REPL выводит результат выполнения операции прямо на экран и снова входит в режим ожидания ввода команд.

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

Для выхода из REPL нужно вместо ввода кода нажать Ctrl + D.

Встроенная документация

Язык Python прямо на уровне синтаксиса поддерживает дополнение кода документацией. Основным средством документирования являются так называемые "строки документации" ("docstrings"). Документированная функция выглядит так:

def add(x, y):
    """Add one argument to another."""
    return x + y

Из таких docstrings генерируется online-документация. А ещё эта документация доступна для просмотра прямо в REPL! Для просмотра документации служит функция help. Давайте объявим функцию add в REPL, попробуем её вызвать, а затем посмотрим описание нашей функции и нескольких встроенных:

Даже просто быстро узнать, что делает та или иная функция — очень полезно. Но функция help может работать и в интерактивном режиме: если её вызвать без аргументов (help()), то будет показана страница приветствия и приглашение в строке ввода изменится на help>. Страница приглашения показывает, какие команды можно вводить, а также упоминает, что для выхода из режима справки нужно дать команду quit (нажатие Ctrl+D вместо ввода команды тоже сработает). Новичкам может быть полезна команда topics, выводящая список тем, по которым можно почитать статьи прямо в этом же режиме справки REPL'а. Войдём же в режим справки, выведем список тем, а затем откроем статью, которая рассказывает о доступных в языке Python операторах:

REPL и примеры кода в источниках

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

>>> 1 + 2
3
>>> len("Thomas")
6
>>> "Hello" + '\n' + "World!"
'Hello\nWorld!'
>>> print("Hello" + '\n' + "World!")
Hello
World!

Здесь строчки, начинающиеся на >>> (эти символы называются "приглашением" ("prompt")) — это код, введённый программистом. А следующий за "вводом" текст до следующей строчки с приглашением, представляет собой результат выполнения введённого кода. Если вы решите попробовать указанный в таком виде пример самостоятельно, не вводите само приглашение, вводите только сам код, следующий за символами >>>. И строки вывода тоже вводить не нужно — тут уж интерпретатор сам справится!

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

Каноническое представление и вывод на печать

Заметьте, что при вводе строки, в выводе интерпретатора она отображается с кавычками и со спецсимволами. Числа выводятся, как числа. То же самое касается вывода любых других значений: большинство значений выводится в виде "канонического строкового представления" ("canonical string representation"). Представленные таким образом значения, как правило, можно скопировать в строку приглашения и выполнить опять, т.е. каноническое представление обычно является правильным кодом на Python.

Кстати, самостоятельно получить каноническое представление произвольного значения можно с помощью функции repr. Примеры:

>>> repr(42)
'42'
>>> repr("foo")
'"foo"'
>>> repr(None)
'None'

А вот результат вызова функции print не содержит кавычек, и спецсимволы, вроде символа переноса строки, не отображаются (но эффект на вывод оказывают). Так происходит, как вы могли догадаться, потому, что мы видим результат вывода строки на печать.

REPL и None

Ещё вам стоит знать о том, как REPL отображает возврат из функции значения None. Дело в том, что никак! Это сделано специально: любая функция, которая не возвращает результат явно, считается функцией, возвращающей None. И чтобы не "мозолить глаза" программисту бесконечными None в выводе REPL, авторами интерпретатора было решено подавлять вывод этого значения. Именно поэтому в примере выше REPL мы не увидели, что функция print на самом деле вернула None! Но мы всё же можем увидеть в REPL None, если обернём вызов print... в ещё один вызов print:

>>> print(42)
42
>>> print(print(42))
42
None

Вот и оно, значение None! Мы видим это значение потому, что второй print получает None на вход и приводит к строке, а уже строку — печатает.

Если вы вдруг столкнётесь с ситуацией, когда ваша функция в REPL вызывается, но "ничего не возвращается" — не паникуйте! Возможно ваша функция всего лишь возвращает None (скажем, потому, что вы забыли сделать return)!

Ввод многострочного кода

В Python REPL можно вводить и многострочный код, а ведь не каждый REPL такое позволяет! И пусть отредактировать уже введённые строчки не получится, но, к примеру, небольшие функции вводить вполне удобно. Когда вы вводите строчку, которая по смыслу ещё не завершилась, то REPL меняет приглашение на ... и ожидает ввода новой строчки в дополнение к уже введённой. Так можно ввести целое определение функции вместе с docstring и логикой. Окончанием ввода всего многострочного кода служит пустая строчка (поэтому в коде не получится использовать пустые строчки). В источниках примеры с многострочным кодом будут выглядеть так:

>>> def is_positive(x):
...     """Return True if argument is positive."""
...     if x <= 0:
...          return False
...     return True
...
>>> is_positive(42)
True

REPL — подключение модулей

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

>>> import operator
>>> from math import sqrt
>>> operator.pow(2, 5)
32
>>> sqrt(64)
8.0

REPL — удобный калькулятор

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

>>> result = 42 * 7
>>> result = result - 1
>>> result = result // 2
>>> result
146

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

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

>>> 42 * 7
294
>>> _ - 1
293
>>> _ // 2
146
>>> _
146

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

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

>>> 42
42
>>> _ // 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> _ // 6
7
>>> a = _
>>> _ + 20
27
>>> a
7

Важно: специальная переменная _ доступна только в REPL, в коде программ такая переменная может быть объявлена, но работать она будет, как любая другая. Помните об этом, когда будете переносить код из REPL в модули.


Самостоятельная работа

  • Вычислите в репле значение выражения sqrt(256) + 100 и выведите его на экран, используя функцию print. Фукнция sqrt определена в модуле math, так что её нужно будет предварительно импортировать.
  • Запишите вычисление и вывод выражения в файл и запустите этот файл (с помощью python3).

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

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

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

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

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
1 декабря 8 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»