9. Komponenter på högsta nivå

Python-tolken kan få sin indata från ett antal källor: från ett skript som skickas till den som standardinmatning eller som programargument, som skrivs in interaktivt, från en moduls källfil, etc. I detta kapitel beskrivs den syntax som används i dessa fall.

9.1. Kompletta Python-program

Även om en språkspecifikation inte behöver föreskriva hur språktolken anropas, är det användbart att ha en uppfattning om ett komplett Python-program. Ett komplett Python-program exekveras i en minimalt initialiserad miljö: alla inbyggda och standardmoduler är tillgängliga, men inga har initialiserats, förutom sys (olika systemtjänster), builtins (inbyggda funktioner, undantag och None) och __main__. Den senare används för att tillhandahålla det lokala och globala namnrymden för exekvering av hela programmet.

Syntaxen för ett komplett Python-program är den för filinmatning, som beskrivs i nästa avsnitt.

Tolken kan också anropas i interaktivt läge; i detta fall läser och exekverar den inte ett komplett program utan läser och exekverar en sats (eventuellt sammansatt) i taget. Den initiala miljön är identisk med den för ett komplett program; varje sats exekveras i namnrymden för __main__.

Ett komplett program kan skickas till tolken på tre olika sätt: med kommandoradsalternativet -c string, som en fil som skickas som första argument på kommandoraden eller som standardinmatning. Om filen eller standardinmatningen är en tty-enhet går tolken in i interaktivt läge, annars exekveras filen som ett komplett program.

9.2. Filinmatning

Alla indata som läses från icke-interaktiva filer har samma form:

file_input: (NEWLINE | statement)* ENDMARKER

Denna syntax används i följande situationer:

  • vid parsning av ett komplett Python-program (från en fil eller från en sträng);

  • vid parsning av en modul;

  • vid parsning av en sträng som skickas till funktionen exec();

9.3. Interaktiv inmatning

Inmatning i interaktivt läge analyseras med hjälp av följande grammatik:

interactive_input: [stmt_list] NEWLINE | compound_stmt NEWLINE | ENDMARKER

Observera att en sammansatt sats (på högsta nivån) måste följas av en blankrad i interaktivt läge; detta behövs för att hjälpa parsern att upptäcka slutet på inmatningen.

9.4. Uttrycksinmatning

eval() används för att mata in uttryck. Den ignorerar ledande blanksteg. Strängargumentet till eval() måste ha följande form:

eval_input: expression_list NEWLINE* ENDMARKER