8. Top-level components

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

8.1. 完整的 Python 程序

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

完整的 Python 程序的语法就是文件 Importing 的语法,这将在下一节中介绍。

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

完整的程序可以三种形式传递给解释器:使用-c * string *命令行选项,作为第一个命令行参数传递的文件或作为标准 Importing 传递。如果文件或标准 Importing 是 tty 设备,则解释器进入交互模式;否则,解释器进入交互模式。否则,它将文件作为完整程序执行。

8.2. FilesImporting

从非交互式文件读取的所有 Importing 都具有相同的形式:

file_input ::=  (NEWLINE | statement)*

在以下情况下使用此语法:

  • 解析完整的 Python 程序时(从文件或字符串);

  • 解析模块时;

  • 解析传递给exec语句的字符串时;

8.3. 互动 Importing

交互模式下的 Importing 使用以下语法进行解析:

interactive_input ::=  [stmt_list] NEWLINE | compound_stmt NEWLINE

请注意,在交互模式下,(顶级)复合语句必须后跟空白行;这是帮助解析器检测 Importing 结束的必要条件。

8.4. 表达式 Importing

表达式 Importing 有两种形式。两者都忽略前导空格。 eval()的字符串参数必须具有以下形式:

eval_input ::=  expression_list NEWLINE*

input()读取的 Importing 行必须具有以下格式:

input_input ::=  expression_list NEWLINE

注意:要不加解释地读取“原始”Importing 行,可以使用文件对象的内置函数raw_input()readline()方法。