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

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

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

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

eval_input ::=  expression_list NEWLINE*