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

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

Python поставляется со встроенным 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

Из таких строк генерируется online-документация. А еще эта документация доступна для просмотра прямо в REPL. Для просмотра документации служит функция help.

Давайте объявим функцию add в REPL, попробуем ее вызвать, а затем посмотрим описание нашей функции:

Функция help работает и в интерактивном режиме. Ее можно вызвать без аргументов с помощью команды help() — в таком случае вы увидите страницу приветствия, а приглашение в строке ввода изменится на help>. Страница приглашения показывает, какие команды можно вводить. Для выхода из режима справки нужно дать команду quit или нажать Ctrl+D.

Новичкам может быть полезна команда topics. Она выводит список тем, по которым можно почитать статьи прямо в этом же режиме справки REPL.

Войдем в режим справки и выведем список тем. Затем откроем статью, которая рассказывает об операторах языка Python:

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

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

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

Обратите внимание на разные начала строчек:

  • Строки с >>> — это код, введенный программистом. Сам символ >>> называется приглашением
  • Строки без >>> — это результат выполнения введенного кода

Если вы решите попробовать это самостоятельно, не вводите само приглашение — достаточно ввести только сам код, следующий за символами >>>.

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

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

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

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

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

Обратите внимание, что результат вызова функции print не содержит кавычек и спецсимволов. Так происходит потому, что мы видим результат вывода строки на печать.

REPL и None

Еще вам стоит знать, как REPL отображает возврат из функции значения None.

Правильный ответ — никак, и это сделано специально. Если функция не возвращает результат явно, считается, что она возвращает None. И чтобы не загромождать вывод REPL бесконечными None, авторы интерпретатора решили подавлять вывод этого значения.

Именно поэтому в примере выше REPL мы не увидели, что функция print на самом деле вернула None.

Но мы все таки можем увидеть в REPL None. Для этого надо обернуть вызов print в еще один вызов print:

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

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

В работе вы можете столкнуться с ситуацией, когда функция в REPL вызывается, но ничего не возвращает. В этом нет ничего страшного: возможно, ваша функция всего лишь возвращает None.

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

В Python 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 удобно использовать даже в роли обычного калькулятора. Разница только в том, что REPL не запоминает промежуточный результат. Чтобы это исправить, мы можем использовать для хранения промежуточных результатов переменную:

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

Обратите внимание, что присваивание не приводит к выводу каких-либо значений. Встроенные инструкции (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 в модули.


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

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

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

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

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

Об обучении на Хекслете

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

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 25 апреля
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 25 апреля

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

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

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

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»