8. 最高层级组件¶
Python 解释器可以从多种源获得输入:作为标准输入或程序参数传入的脚本,以交互方式键入的语句,导入的模块源文件等等。 这一章将给出在这些情况下所用的语法。
8.1. 完整的 Python 程序¶
While a language specification need not prescribe how the language interpreter
is invoked, it is useful to have a notion of a complete Python program. A
complete Python program is executed in a minimally initialized environment: all
built-in and standard modules are available, but none have been initialized,
except for sys
(various system services), __builtin__
(built-in
functions, exceptions and None
) and __main__
. The latter is used to
provide the local and global namespace for execution of the complete program.
适用于一个完整 Python 程序的语法即下节所描述的文件输入。
解释器也可以通过交互模式被发起调用;在此情况下,它并不读取和执行一个完整程序,而是每次读取和执行一条语句(可能为复合语句)。 此时的初始环境与一个完整程序的相同;每条语句会在 __main__
的命名空间中被执行。
A complete program can be passed to the interpreter
in three forms: with the -c
string command line option, as a file
passed as the first command line argument, or as standard input. If the file
or standard input is a tty device, the interpreter enters interactive mode;
otherwise, it executes the file as a complete program.
8.2. 文件输入¶
所有从非交互式文件读取的输入都具有相同的形式:
file_input ::= (NEWLINE | statement
)*
此语法用于下列几种情况:
- 解析一个完整 Python 程序时(从文件或字符串);
- 解析一个模块时;
- when parsing a string passed to the
exec
statement;
8.3. 交互式输入¶
交互模式下的输入使用以下语法进行解析:
interactive_input ::= [stmt_list
] NEWLINE |compound_stmt
NEWLINE
请注意在交互模式下一条(最高层级)复合语句必须带有一个空行;这对于帮助解析器确定输入的结束是必须的。
8.4. 表达式输入¶
There are two forms of expression input. Both ignore leading whitespace. The
string argument to eval()
must have the following form:
eval_input ::= expression_list
NEWLINE*
The input line read by input()
must have the following form:
input_input ::= expression_list
NEWLINE
Note: to read ‘raw’ input line without interpretation, you can use the built-in
function raw_input()
or the readline()
method of file objects.