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*