2. 使用 Python 的解释器

2.1. 唤出解释器

The Python interpreter is usually installed as <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">/usr/local/bin/python3.12</font> on those machines where it is available; putting <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">/usr/local/bin</font> in your Unix shell’s search path makes it possible to start it by typing the command:
  1. python3.12
这样,就可以在 shell 中运行 Python 了 [1] 。因为可以选择安装目录,解释器也有可能安装在别的位置;如果还不明白,就去问问身边的 Python 大神或系统管理员。(例如,常见备选路径还有 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">/usr/local/python</font>。) On Windows machines where you have installed Python from the Microsoft Store, the <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">python3.12</font> command will be available. If you have the py.exe launcher installed, you can use the <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">py</font> command. See 附录:设置环境变量 for other ways to launch Python. 在主提示符中,输入文件结束符(Unix 里是 Control-D,Windows 里是 Control-Z),就会退出解释器,退出状态码为 0。如果不能退出,还可以输入这个命令:<font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">quit()</font> 在支持 GNU Readline 库的系统中,解释器的行编辑功能包括交互式编辑、历史替换、代码补全等。检测是否支持命令行编辑最快速的方式是,在首次出现 Python 提示符时,输入 Control-P。听到“哔”提示音,说明支持行编辑;请参阅附录 交互式编辑和编辑历史,了解功能键。如果没有反应,或回显了 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">^P</font>,则说明不支持行编辑;只能用退格键删除当前行的字符。 解释器的操作方式类似 Unix Shell:用与 tty 设备关联的标准输入调用时,可以交互式地读取和执行命令;以文件名参数,或标准输入文件调用时,则读取并执行文件中的 脚本 另一种启动解释器的方式是 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">python</font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);"> </font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">-c</font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);"> </font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">command</font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);"> </font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">[arg]</font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);"> </font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">...</font>,这将执行 command 中的语句,相当于 shell 的 -c 选项。 由于 Python 语句经常包含空格或其他会被 shell 特殊对待的字符,通常建议用引号将整个 command 括起来。 Python 模块也可以当作脚本使用。输入:<font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">python</font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);"> </font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">-m</font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);"> </font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">module</font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);"> </font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">[arg]</font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);"> </font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">...</font>,会执行 module 的源文件,这跟在命令行把路径写全了一样。 在交互模式下运行脚本文件,只要在脚本名称参数前,加上选项 -i 就可以了。 命令行的所有选项详见 命令行与环境

2.1.1. 传入参数

解释器读取命令行参数,把脚本名与其他参数转化为字符串列表存到 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">sys</font> 模块的 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">argv</font> 变量里。执行 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">import</font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);"> </font><font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">sys</font>,可以导入这个模块,并访问该列表。该列表最少有一个元素;未给定输入参数时,<font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">sys.argv[0]</font> 是空字符串。给定脚本名是 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">'-'</font> (标准输入)时,<font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">sys.argv[0]</font> <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">'-'</font>。使用 -c command 时,<font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">sys.argv[0]</font> <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">'-c'</font>。如果使用选项 -m module<font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">sys.argv[0]</font> 就是包含目录的模块全名。解释器不处理 -c command -m module 之后的选项,而是直接留在 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">sys.argv</font> 中由命令或模块来处理。

2.1.2. 交互模式

在终端(tty)输入并执行指令时,解释器在 交互模式(interactive mode) 中运行。在这种模式中,会显示 主提示符,提示输入下一条指令,主提示符通常用三个大于号(<font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">>>></font>)表示;输入连续行时,显示 次要提示符,默认是三个点(<font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">...</font>)。进入解释器时,首先显示欢迎信息、版本信息、版权声明,然后才是提示符:
  1. $ python3.12
  2. Python 3.12 (default, April 4 2022, 09:25:04)
  3. [GCC 10.2.0] on linux
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>>
输入多行架构的语句时,要用连续行。以 if 为例: >>>
  1. >>> the_world_is_flat = True
  2. >>> if the_world_is_flat:
  3. ... print("Be careful not to fall off!")
  4. ...
  5. Be careful not to fall off!
交互模式的内容详见 交互模式

2.2. 解释器的运行环境

2.2.1. 源文件的字符编码

默认情况下,Python 源码文件的编码是 UTF-8。这种编码支持世界上大多数语言的字符,可以用于字符串字面值、变量、函数名及注释 —— 尽管标准库只用常规的 ASCII 字符作为变量名或函数名,可移植代码都应遵守此约定。要正确显示这些字符,编辑器必须能识别 UTF-8 编码,而且必须使用支持文件中所有字符的字体。 如果不使用默认编码,则要声明文件的编码,文件的 第一 行要写成特殊注释。句法如下:
  1. # -*- coding: encoding -*-
其中,encoding 可以是 Python 支持的任意一种 codecs 比如,声明使用 Windows-1252 编码,源码文件要写成:
  1. # -*- coding: cp1252 -*-

第一行 的规则也有一种例外情况,源码以 UNIX “shebang” 行 开头。此时,编码声明要写在文件的第二行。例如:

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

备注

[1] Unix 系统中,为了不与同时安装的 Python 2.x 冲突,Python 3.x 解释器默认安装的执行文件名不是 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">python</font>

14. 交互式编辑和编辑历史

某些版本的 Python 解释器支持编辑当前输入行和编辑历史记录,类似 Korn shell 和 GNU Bash shell 的功能 。这个功能使用了 GNU Readline 来实现,一个支持多种编辑方式的库。这个库有它自己的文档,在这里我们就不重复说明了。

14.1. Tab 补全和编辑历史

在解释器启动的时候变量和模块名补全功能将 自动启用 以便在按下 Tab 键时发起调用补全函数;它会查找 Python 语句名称、当前局部变量和可用的模块名称。 对于带点号的表达式如 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">string.a</font>,它会对该表达式最后一个 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">'.'</font> 之前的部分求值然后根据结果对象的属性给出补全建议。 请注意如果具有 getattr() 方法的对象是该表达式的一部分这可能会执行应用程序定义的代码。 默认配置还会将你的编辑历史保存到你的用户目录下名为 <font style="color:rgb(0, 0, 0);background-color:rgb(236, 240, 243);">.python_history</font> 的文件。 该历史在下一次交互式解释器会话期间将继续可用。

14.2. 默认交互式解释器的替代品

Python 解释器与早期版本的相比,向前迈进了一大步;无论怎样,还有些希望的功能:如果能在编辑连续行时建议缩进(解析器知道接下来是否需要缩进符号),那将很棒。补全机制可以使用解释器的符号表。有命令去检查(甚至建议)括号,引号以及其他符号是否匹配。 一个可选的增强型交互式解释器是 IPython,它已经存在了有一段时间,它具有 tab 补全,探索对象和高级历史记录管理功能。它还可以彻底定制并嵌入到其他应用程序中。另一个相似的增强型交互式环境是 bpython