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*