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