9. 顶级组件

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

9.1. 完成python程序

虽然语言规范不需要规定如何调用语言解释器,但是有一个完整的Python程序的概念是很有用的。完整的python程序是在一个最小初始化的环境中执行的:所有的内置模块和标准模块都是可用的,但是除了 sys (各种系统服务) builtins (内置功能、例外和 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*