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_stmt NEWLINE | ENDMARKER

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


9.4. Ввод выражения
===================

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

   eval_input: expression_list NEWLINE* ENDMARKER
