9. Компоненти верхнього рівня¶
Інтерпретатор Python може отримувати вхідні дані з кількох джерел: зі сценарію, переданого йому як стандартний ввід, або як аргумент програми, введений інтерактивно, з вихідного файлу модуля тощо. У цій главі наведено синтаксис, який використовується в цих випадках.
9.1. Повні програми на Python¶
Хоча в специфікації мови не обов’язково вказувати, як викликається інтерпретатор мови, корисно мати уявлення про повну програму Python. Повна програма Python виконується в мінімально ініціалізованому середовищі: усі вбудовані та стандартні модулі доступні, але жоден не ініціалізований, за винятком sys
(різні системні служби), builtins
(вбудований -in функції, винятки та 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*