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*