9. Компоненты верхнего уровня¶
Интерпретатор Python может получать входные данные из ряда источников: из сценария, переданного ему в качестве стандартного ввода или в качестве аргумента программы, набираемого в интерактивном режиме, из исходного файла модуля и т.д. В этой главе приводится синтаксис используемый во всех приведённых случаях.
9.1. Полные программы на Python¶
Хотя спецификация языка не обязана предписывать
способ вызова интерпретатора языка, полезно иметь представление о полной
программе Python. Полная программа Python выполняется в минимально
инициализированной среде: доступны все встроенные и стандартные модули, но ни
один не был инициализирован, за исключением sys (различные системные
службы), builtins (встроенные функции, исключения и None) и
__main__ . Последний используется для предоставления локального и глобального
пространства имён для выполнения всей программы.
Синтаксис полной программы на Python аналогичен вводному файлу, описанному в следующем разделе.
Интерпретатор также может быть вызван в
интерактивном режиме; в этом случае он не читает и не выполняет полную
программу, а читает и выполняет по одному оператору (возможно, составному) за
раз. Исходная среда идентична среде полной программы; каждый оператор
выполняется в пространстве имён __main__.
Полная программа может быть передана
интерпретатору в трёх формах: с параметром командной строки -c в
виде строки; как файл, переданный как первый аргумент командной строки или как
стандартный ввод. Если файл или стандартный ввод — это tty-устройство,
интерпретатор переходит в интерактивный режим; в противном случае он выполняет
файл как полную программу.
9.2. Файловый ввод¶
Все входные данные, считываемые из неинтерактивных файлов, имеют одинаковую форму :
file_input ::=  (NEWLINE | statement)*
Этот синтаксис используется в следующих ситуациях:
- при разборе полной программы Python (из файла или из строки);
 - при парсинге модуля;
 - при разборе строки, переданной в функцию 
exec() 
9.3. Интерактивный ввод¶
Ввод в интерактивном режиме анализируется с использованием следующей грамматики:
interactive_input ::= [stmt_list] NEWLINE |compound_stmtNEWLINE
Обратите внимание, что за составным оператором (верхнего уровня) в интерактивном режиме должна следовать пустая строка; это необходимо, чтобы помочь синтаксическому анализатору обнаружить конец ввода.
9.4. Ввод выражения¶
Для ввода выражений используется eval(). Он
игнорирует начальные пробелы. Строковый аргумент eval() должен иметь
следующую форму :
eval_input ::=  expression_list NEWLINE*
