Skip to main content

9. 顶级组件

Python解释器可以从多个来源获得其输入:从作为标准输入或作为程序参数传递的脚本,以交互方式从模块源文件等输入的脚本。本章给出了在这些情况下使用的语法。

9.1. 完成Python程序

虽然语言规范不需要规定如何调用语言解释器,但是有一个完整的Python程序的概念是有用的。一个完整的Python程序在最小化初始化环境中执行:除了 sys (各种系统服务),builtins (内置函数,异常和 None)和 __main__ 之外,所有内置和标准模块都可用,但没有被初始化。后者用于提供用于执行完整程序的本地和全局命名空间。

一个完整的Python程序的语法是文件输入,在下一节中描述。

解释器也可以以交互模式被调用;在这种情况下,它不会读取和执行一个完整的程序,但一次读取和执行一个语句(可能是复合)。初始环境与完整程序的环境相同;每个语句在 __main__ 的命名空间中执行。

在Unix下,一个完整的程序可以以三种形式传递给解释器:-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*