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*