2. 使用 Python 解释器
*********************


2.1. 调用解释器
===============

Python 解释器在其被使用的机器上通常安装为 "/usr/local/bin/python3.9"；
将 "/usr/local/bin" 加入你的 Unix 终端的搜索路径就可以通过键入以下命令
来启动它:

   python3.9

就能运行了 [1] 。安装时可以选择安装目录，所以解释器也可能在别的地方；
可以问问你身边的 Python 大牛，或者你的系统管理员。（比如
"/usr/local/python" 也是比较常用的备选路径）

在 Windows 机器上当你从 Microsoft Store 安装 Python 之后，"python3.9"
命令将可使用。 如果你安装了 py.exe 启动器，你将可以使用 "py" 命令。 请
参阅 附录：设置环境变量 了解启动 Python 的其他方式。

在主提示符中输入文件结束字符（在 Unix 系统中是 "Control-D"，Windows 系
统中是 "Control-Z"）就退出解释器并返回退出状态为0。如果这样不管用，你
还可以写这个命令退出："quit()"。

解释器的行编辑功能在支持 GNU Readline 库的系统中也包括交互式编辑，历史
替换和代码补全等。 检测是否支持行编辑最快速的方式是在首次出现 Python
提示符时输入 "Control-P"。 如果听到“哔”提示音，就说明支持行编辑；请参
阅附录 交互式编辑和编辑历史 了解有关功能键的介绍。 如果什么都没发生，
或是回显了 "^P"，说明不支持行编辑；你只能用退格键从当前行中删除字符。

解释器运行的时候有点像 Unix 命令行：在一个标准输入 tty 设备上调用，它
能交互式地读取和执行命令；调用时提供文件名参数，或者有个文件重定向到标
准输入的话，它就会读取和执行文件中的 *脚本*。

另一种启动解释器的方式是 "python -c command [arg] ..."，其中 *command*
要换成想执行的指令，就像命令行的 "-c" 选项。由于 Python 代码中经常会包
含对终端来说比较特殊的字符，通常情况下都建议用英文单引号把 *command*
括起来。

有些 Python 模块也可以作为脚本使用。可以这样输入："python -m module
[arg] ..."，这会执行 *module* 的源文件，就跟你在命令行把路径写全了一样
。

在运行脚本的时候，有时可能也会需要在运行后进入交互模式。这种时候在文件
参数前，加上选项 "-i" 就可以了。

关于所有的命令行选项，请参考 命令行与环境。


2.1.1. 传入参数
---------------

如果可能的话，解释器会读取命令行参数，转化为字符串列表存入 "sys" 模块
中的 "argv" 变量中。执行命令 "import sys" 你可以导入这个模块并访问这个
列表。这个列表最少也会有一个元素；如果没有给定输入参数，"sys.argv[0]"
就是个空字符串。如果脚本名是标准输入，"sys.argv[0]" 就是 "'-'"。使用
"-c" *command* 时，"sys.argv[0]" 就会是 "'-c'"。如果使用选项 "-m"
*module*，"sys.argv[0]" 就是包含目录的模块全名。在 "-c" *command* 或
"-m" *module* 之后的选项不会被解释器处理，而会直接留在 "sys.argv" 中给
命令或模块来处理。


2.1.2. 交互模式
---------------

在终端（tty）输入并执行指令时，我们说解释器是运行在 *交互模式（
interactive mode）*。在这种模式中，它会显示 *主提示符（primary prompt
）*，提示输入下一条指令，通常用三个大于号（">>>"）表示；连续输入行的时
候，它会显示 *次要提示符*，默认是三个点（"..."）。进入解释器时，它会先
显示欢迎信息、版本信息、版权声明，然后就会出现提示符：

   $ python3.9
   Python 3.9 (default, June 4 2019, 09:25:04)
   [GCC 4.8.2] on linux
   Type "help", "copyright", "credits" or "license" for more information.
   >>>

多行指令需要在连续的多行中输入。比如，以 "if" 为例：

   >>> the_world_is_flat = True
   >>> if the_world_is_flat:
   ...     print("Be careful not to fall off!")
   ...
   Be careful not to fall off!

有关交互模式的更多内容，请参考 交互模式。


2.2. 解释器的运行环境
=====================


2.2.1. 源文件的字符编码
-----------------------

默认情况下，Python 源码文件以 UTF-8 编码方式处理。在这种编码方式中，世
界上大多数语言的字符都可以同时用于字符串字面值、变量或函数名称以及注释
中——尽管标准库中只用常规的 ASCII 字符作为变量或函数名，而且任何可移植
的代码都应该遵守此约定。要正确显示这些字符，你的编辑器必须能识别 UTF-8
编码，而且必须使用能支持打开的文件中所有字符的字体。

如果不使用默认编码，要声明文件所使用的编码，文件的 *第一* 行要写成特殊
的注释。语法如下所示：

   # -*- coding: encoding -*-

其中 *encoding* 可以是 Python 支持的任意一种 "codecs"。

比如，要声明使用 Windows-1252 编码，你的源码文件要写成：

   # -*- coding: cp1252 -*-

关于 *第一行* 规则的一种例外情况是，源码以 UNIX "shebang" 行 开头。这
种情况下，编码声明就要写在文件的第二行。例如：

   #!/usr/bin/env python3
   # -*- coding: cp1252 -*-

-[ 脚注 ]-

[1] 在Unix系统中，Python 3.x解释器默认安装后的执行文件并不叫作
    "python"，这样才不会与同时安装的Python 2.x冲突。
