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

9.1。完整的Python程序

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

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

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

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

9.2。文件输入

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

file_input :: =(NEWLINE | statement)*

 

此语法用于以下情况:

  • 解析完整的Python程序时(从文件或字符串中);
  • 解析模块时;
  • 解析传递给exec()函数的字符串时;

9.3。交互式输入

使用以下语法解析交互模式下的输入:

interactive_input :: = [ stmt_list] NEWLINE | compound_stmt

 

新队

请注意,(顶级)复合语句必须在交互模式下后跟一个空行; 这是帮助解析器检测输入结束所必需的。

9.4。表达式输入

eval()用于表达式输入。它忽略了领先的空白。字符串参数eval()必须具有以下形式:

eval_input :: =   expression_listNEWLINE *