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*