9. Компоненты верхнего уровня

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

9.1. Полные программы на Python

Хотя спецификация языка не обязательно должна предписывать, как вызывать интерпретатор языка, полезно иметь представление о полной программе на Python. Полная программа Python выполняется в минимально инициализированной среде: все встроенные и стандартные модули доступны, но ни один из них не инициализирован, за исключением sys (различные системные службы), builtins (встроенные функции, исключения и None) и __main__. Последний используется для предоставления локального и глобального пространства имен для выполнения всей программы.

Синтаксис полной программы на Python - это синтаксис для ввода файлов, описанный в следующем разделе.

Интерпретатор также может быть вызван в интерактивном режиме; в этом случае он не читает и не выполняет полную программу, а читает и выполняет по одному оператору (возможно, составному) за раз. Начальное окружение идентично окружению полной программы; каждый оператор выполняется в пространстве имен __main__.

Полная программа может быть передана интерпретатору в трех формах: с помощью опции -c string, в виде файла, переданного в качестве первого аргумента командной строки, или в виде стандартного ввода. Если файл или стандартный ввод является устройством tty, интерпретатор переходит в интерактивный режим; в противном случае он выполняет файл как полную программу.

9.2. Ввод файлов

Все данные, считываемые из неинтерактивных файлов, имеют одинаковый вид:

file_input ::=  (NEWLINE | statement)*

Этот синтаксис используется в следующих ситуациях:

  • при разборе полной программы на Python (из файла или из строки);

  • при разборе модуля;

  • при разборе строки, переданной в функцию exec();

9.3. Интерактивный ввод

Ввод в интерактивном режиме разбирается с помощью следующей грамматики:

interactive_input ::=  [stmt_list] NEWLINE | compound_stmt NEWLINE

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

9.4. Ввод экспрессии

eval() используется для ввода выражений. Он игнорирует ведущие пробельные символы. Строковый аргумент для eval() должен иметь следующий вид:

eval_input ::=  expression_list NEWLINE*