Книга: Как устроен Python. Гид для разработчиков, программистов и интересующихся
Назад: 2. Какая версия Python?
Дальше: 4. Запуск программ

3. Интерпретатор

Python традиционно относится к семейству интерпретируемых языков (другой термин для описания интерпретируемого языка — язык сценариев). Чтобы программа могла выполняться на компьютерном процессоре, она должна существовать в формате, понятном для этого процессора — а именно в машинном коде. Интерпретируемые языки не компилируются в машинный код напрямую; вместо этого в системе существует промежуточная прослойка — интерпретатор, — которая выполняет эту функцию.

У такого подхода есть как достоинства, так и недостатки. Как нетрудно понять, трансляция «на ходу» может занимать много времени. Интерпретируемый код — такой, как программы Python, — может работать в 10–100 раз медленнее программ на языке C. С другой стороны, написание кода на Python оптимизирует время разработки. Программы на языке Python нередко получаются в 2–10 раз короче своих аналогов на языке C. Кроме того, этап компиляции может занимать довольно много времени и отвлекать программиста между разработкой и отладкой.

Многие разработчики и компании охотно идут на этот компромисс. Небольшие программы (то есть содержащие меньше строк кода) быстрее пишутся и создают меньше проблем с отладкой. Труд программистов обходится дорого — если удастся переложить часть работы на оборудование, это может обойтись дешевле, чем привлечение дополнительных специалистов. Отладить 10 строк кода проще, чем отладить 100 строк кода. Исследования показали, что количество ошибок в коде пропорционально количеству строк. Следовательно, если язык позволяет написать меньше строк кода для решения некоторой задачи, то, скорее всего, программа будет содержать меньше ошибок. Иногда скорость выполнения программы не столь важна, и во многих практических случаях Python работает достаточно быстро. Кроме того, были предприняты проекты, направленные на ускорение работы интерпретатора Python, например PyPy.

513493.png 

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

3.1. REPL

Для Python также существует интерактивный интерпретатор, который называется REPL (Read Evaluate Print Loop — цикл «чтение-вычисление-вывод»). REPL в цикле ожидает, пока появятся входные данные, читает и обрабатывает (интерпретирует) их, после чего выводит результат. Запуская исполняемый файл python3, вы запускаетe интерактивный интерпретатор Python. Другие среды, например IDLE, также содержат встроенный интерактивный интерпретатор.

ПРИМЕЧАНИЕ

В этой книге Python 3 обычно запускается командой python3. В системе Windows исполняемому файлу присвоено имя python. Если вы работаете в Windows, замените имя python3 именем python. В системе Unix менять ничего не нужно.

При запуске интерпретатор выводит версию Python, информацию о сборке и несколько подсказок по использованию. Наконец, интерпретатор выдает приглашение >>>.

3-1.tiff 

Рис. 3.2. Чтобы запустить REPL, введите в приглашении командной строки команду python3. Команда открывает сеанс Python

3-3.tiff 

Рис. 3.3. Чтобы запустить REPL из IDE, щелкните на значке IDLE или введите команду python3 -m idlelib.idle

IDLE (редактор, включенный в поставку Python) также можно запустить командой python3 -m idlelib.idle.

ПРИМЕЧАНИЕ

Некоторые дистрибутивы Linux включают не все библиотеки из стандартной библиотеки Python. Это неприятно, но на то есть своя причина: на сервере не нужны библиотеки для создания клиентских приложений. По этой причине Ubuntu и Arch (среди прочих) в установке по умолчанию не включают библиотеки графического интерфейса, необходимые для IDLE.

Если вы увидите ошибку, которая выглядит примерно так:

$ python3 -m idlelib.idle

** IDLE can't import Tkinter.

Your Python may not be configured for Tk. **

это означает, что в системе отсутствует библиотека tkinter.

В Ubuntu следует выполнить команду:

$ sudo apt-get install tk-dev

В Arch эта команда выглядит так:

$ sudo pacman -S tk

 

3.2. Пример использования REPL

Следующий пример показывает, почему интерактивный интерпретатор REPL получил свое название. Введите команду python3 в командной строке или запустите IDLE; вы увидите приглашение >>>.

Введите 2 + 2, как показано ниже, и нажмите клавишу Enter:

$ python3

>>> 2 + 2

4

>>>

В этом примере мы ввели команду python3, которая запустила интерпретатор. Первое приглашение >>> можно рассматривать как первую часть названия (R — чтение): Python ожидает входных данных. Мы ввели 2 + 2, интерпретатор прочитал и обработал (E — обработка) их. Далее выводится (P — вывод) результат этого выражения — 4. Второе приглашение >>> относится к циклу (L — цикл): интерпретатор ожидает новых входных данных.

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

ПРИМЕЧАНИЕ

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

>>> sum([1, 2, 3, 4, 5,

... 6, 7])

Эти приглашения определяются в модуле sys:

>>> import sys

>>> sys.ps1

'>>> '

>>> sys.ps2

'... '

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

REPL — весьма полезный инструмент. При помощи интерактивного интерпретатора можно писать небольшие функции, тестировать фрагменты кода и даже выполнять вычисления, как на калькуляторе. А еще интереснее пойти в другом направлении: запустите свой код Python в REPL. Код будет выполнен, а вы сможете проверить его состояние в REPL (скоро мы покажем, как сделать это в IDLE).

Символы >>> образуют приглашение. Здесь вы вводите свою программу. Введите после >>> команду print("hello world") и нажмите клавишу Enter. Проследите за тем, чтобы перед словом print не было ни пробелов, ни табуляций. Результат должен выглядеть так:

>>> print("hello world")

hello world

Если все получилось именно так — поздравляем, вы написали свою первую программу на Python. Считайте, что отныне официально приобщились к миру программирования. Вы только что запустили программу «hello world» — классическую программу, которую многие по традиции пишут в начале знакомства с новым языком. Чтобы выйти из REPL в терминале, введите quit(). Пользователи Unix также могут нажать клавиши Ctl+D.

3-4.tiff 

Рис. 3.4. IDLE пытается указать, где произошла ошибка. Цветовое выделение после world обозначает место, в котором ошибка была обнаружена

ПРИМЕЧАНИЕ

Программирование требует точности. Если при вводе print("hello world") пропустить всего один символ, результат может оказаться совсем другим, например, таким:

>>> print("hello world

File "<stdin>", line 1

print("hello world

^

SyntaxError: EOL while scanning string literal

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

3.3. Итоги

Так как Python является интерпретируемым языком, программисты могут использовать REPL для интерактивного исследования возможностей Python. Вам не нужно писать код, компилировать и запускать его — достаточно запустить REPL и начать эксперименты с кодом.

Пользователям, работавшим с компилируемыми языками, такой подход может показаться неожиданным. Не торопитесь с выводами и попробуйте; он может сделать разработку простой и быстрой. Кроме того, не бойтесь экспериментировать с кодом в REPL. По моему опыту, начинающие пользователи Python почему-то обходят REPL стороной. Не бойтесь REPL!

Также существуют другие разновидности REPL для Python. Один из популярных вариантов — Jupyter, REPL на базе веб-технологий. Начав с REPL, вскоре вы сможете перейти к другим, более мощным разновидностям.

3.4. Упражнения

1. Откройте REPL для Python 3 и выполните программу «hello world». Если вы забыли, как выглядит эта однострочная программа, просмотрите эту главу.

2. Откройте REPL из IDLE и выполните программу «hello world».

Чтобы вызвать приглашение командной строки, в меню Пуск системы Windows введите cmd (или нажмите клавиши Win+R). Чтобы быстро вызвать окно терминала на компьютере Mac, нажмите Command+Space, введите Terminal и нажмите Return. Если вы установили Python 3, то теперь сможете запустить его на любой платформе командой python3.

Назад: 2. Какая версия Python?
Дальше: 4. Запуск программ