跳转至

P2-7.3 Python 解释器(interpreter)与脚本(script)

Section ID: P2-7.3 Version: v2026.07.20

在 P2-7.2 中,我们已经看了终端(terminal)、shell、工作文件夹(working directory)。现在要继续看:在那个终端里,Python 代码到底怎样被执行。

最容易混淆的地方,是下面这三行。

1
2
3
python
python example.py
print("hello")

这三行都和 Python 有关,但它们不是同一种句子。有的是终端命令,有的是 Python 代码。这里要把这个边界明确抓住。

这里解释的是 Python 解释器(interpreter)脚本(script)交互模式(interactive mode) 的区分。即使后面再次遇到 python -m pip ... 这种命令,或者笔记本执行,也都要回连到这里:Python 到底是在什么位置、用什么方式读取代码。

这里不是要学习 Python 语法本身,而是要区分 Python 代码到底是在什么位置、通过什么方式执行。如果先抓住解释器、交互执行、脚本执行之间的差别,那么后面再看到虚拟环境、包安装、数据文件执行时,就能先分清:到底是命令写错了,还是 执行位置搞错了

现在这一节先抓什么 紧接着下一步会问什么 以后会再次用在哪里
交互执行和脚本执行的差别 会在 P2-7.4 中继续连到虚拟环境和包安装命令。 以后所有 Python 练习里,区分执行方式和文件结构时都会再次使用。
不要把终端命令和 Python 代码混在一起的标准 P2-7.5 以后会继续接到数据文件和库使用。 会成为解释 Colab 和本地环境差异的基础。
pythonpython file.pypython -m ... 的位置区分 会在 P2-7.6 与 P2-7.7 中用按操作系统区分的安装和执行步骤进一步补强。 会在包安装、模块执行、项目脚本执行中反复出现。
术语 这一节先抓住的意思
Python 解释器(interpreter) 读取并执行 Python 代码的程序。
交互模式(interactive mode) 一行一行输入并立刻确认结果的执行方式。
脚本(script) 把多行代码保存到文件里,再一次执行的方式。
提示符(prompt) 显示“现在可以在这里输入”的标记。
python -m ... 请求 Python 去执行某个特定模块的方式。

核心判断标准:Python 解释器(interpreter)与脚本(script)

  • 能把 Python 解释器(interpreter) 解释成读取并执行 Python 代码的程序。
  • 能说明 交互模式(interactive mode)脚本(script) 执行的差别。
  • 能区分终端命令和 Python 代码。
  • 能用入门层次说明 Colab/Jupyter 代码单元执行与终端执行有何不同。
  • 能说明即使是同样的代码,只要执行方式变了,保存、重跑、共享的方式也会跟着变。

三个判断标准

标准 为什么重要 这里需要的理解层次
解释器是读取并执行 Python 代码的程序 只有把代码和执行程序区分开,才能真正看出执行方式的差异。 只要能用一句话说明解释器的角色就足够。
脚本执行和交互执行的执行单位不同 因为保存、重跑、共享的方式不同。 能区分文件单位执行和一行单位执行。
终端命令和 Python 代码输入的位置不同 即使都像“和 Python 有关的句子”,解释它们的主体也不同。 抓住 shell 提示符和 Python 提示符需要区分的感觉。

为什么解释器和脚本会一起出现

如果只把 Python 理解成“只能运行保存在文件里的程序的语言”,其实很难真正理解它。Python 官方 FAQ 把 Python 解释为一种 interpreted、interactive、object-oriented 的编程语言。它也说明,Guido van Rossum 是在实现 ABC 语言以及参与 Amoeba 分布式操作系统工作时,开始构想 Python 的;而在只靠 C 程序或 Bourne shell script 很难处理系统管理工作的背景下,需要一种更可扩展的脚本语言。

如果把这段背景压缩成入门者能抓住的程度,就是下面这样。

  • shell script:适合把操作系统命令串起来做自动化。
  • 像 C 这样的编译型语言:又快又强,但对小型自动化和小实验来说可能太重。
  • Python:同时提供可读的高级语法、交互执行和脚本执行。

所以,在 Python 里自然会同时看到两种使用方式。

  • 交互执行:立刻测试一个小表达式。
  • 脚本执行:把多行工作保存成文件,然后反复执行。

AI 学习里为什么会经常遇到 Python,也和这里有关。因为用一点点小代码就能立刻试公式,而当实验稍微长起来,又能很方便地留成文件或笔记本。不过这里不会深入展开 Python 语言史,只保留一种感觉:为什么解释器和脚本这两种执行方式会同时出现。

解释器是读取并执行代码的程序

Python 解释器(interpreter) 是读取并执行 Python 代码的程序。Python 官方文档说明,解释器可以从命令行(command line)调用;如果启动时没有提供文件名或标准输入,它就会进入 交互模式(interactive mode)

这里先这样理解。

  • Python 代码:人写出来的命令。
  • Python 解释器:读取并执行 Python 代码的程序。

下面这段就是 Python 代码。

问题场景:确认最简单、会被 Python 解释器读取的代码长什么样。 输入(input):一行输出字符串的 Python 代码。 期待输出(output):执行后会打印 hello。 要确认的概念:解释器就是读取并执行这种 Python 语句的程序。

# 这是保存到脚本文件中再执行的 Python 语句。
print("hello")

这段代码不是只靠文字就会动。它必须被 Python 解释器读取后才会执行。

交互模式是一行一行确认的方式

如果你在终端里运行 Python,就可以使用 交互模式(interactive mode)

python

根据环境不同,命令名也可能是 python3

python3

进入交互模式后,通常会看到 >>> 提示符。Python 官方文档也说明,交互模式里的默认提示符就是 >>>

问题场景:看交互模式里怎样立刻确认一行计算和一行输出。 输入(input):1 + 2 这个计算和 print("hello") 这个调用。 期待输出(output):会立刻打印 3hello。 要确认的概念:交互模式是一种按一行一行去测试计算的执行方式。

1
2
3
4
>>> 1 + 2
3
>>> print("hello")
hello

交互模式特别适合立即确认计算。

交互模式尤其适合下面这些情况。

  • 检查一个很短的计算。
  • 试试看某段语法。
  • 立刻打印一个小值。

但在交互模式里输入的内容,通常不会作为文件保留下来。下次要再运行,还得再打一次。所以当多行代码需要反复执行时,我们会使用 脚本(script) 文件。

脚本是保存在文件里的执行单位

脚本(script) 是把要执行的代码保存在文件里的形式。Python 文件通常使用 .py 扩展名。

例如,假设我们把下面这些内容保存到一个叫 hello.py 的文件中。

问题场景:看把多行 Python 代码保存成文件、然后当作脚本执行的形态。 输入(input):hello.py 里的两行 Python 代码。 期待输出(output):执行后会按顺序打印 hello1 + 2 的结果。 要确认的概念:脚本就是把 Python 代码按文件单位保存下来,再反复执行的方式。

1
2
3
# 脚本会从上到下依次执行多条语句。
print("hello")
print(1 + 2)

如果终端当前就在同一个文件夹里,就可以这样运行。

python hello.py

根据环境不同,也可能使用下面这个命令。

python3 hello.py

脚本执行和交互执行是不同的。

执行方式 输入位置 优点 需要注意的点
交互执行 >>> 提示符 适合立即确认一行 输入内容可能不会保留成文件
脚本执行 .py 文件 容易保存、修改、重跑、共享 必须确认当前工作文件夹和文件路径

在 AI 学习里,有时需要立刻检查一个小计算,有时又需要把同一段代码反复修改后再执行。所以两种方式都会遇到。

不要把终端命令和 Python 代码混在一起

最常见的混淆点就是这个。

python hello.py

这是一个终端命令。它不是写在 Python 代码文件里的句子。

相反,下面这个则是 Python 代码。

问题场景:再次确认即使是同样的 print("hello"),它也只能在 Python 执行位置使用,而不能当成 shell 提示符里的普通命令。 输入(input):一行输出字符串的 Python 代码。 期待输出(output):如果作为 Python 代码执行,就会打印 hello。 要确认的概念:终端命令和 Python 代码,不能按句子外观区分,而要按输入位置区分。

# 同一条 Python 语句也可以在代码单元中运行。
print("hello")

这句不是直接输入到终端里的命令。当然,在 Python 的交互式 >>> 提示符里,它可以被输入。但在普通 shell 提示符里,它不会被当作 Python 代码,而会被当作 shell 命令来解释。

所以,这里很重要的是养成区分提示符的习惯。

  • $% 这样的 shell 提示符:输入终端命令。
  • >>> 这样的 Python 提示符:输入 Python 代码。
  • Colab/Jupyter 代码单元:默认输入 Python 代码。

代码单元位于脚本执行和交互执行之间

Colab 或 Jupyter 的 代码单元(code cell),会按单元来执行 Python 代码。

问题场景:再次确认在笔记本代码单元里执行最小 Python 代码时,会发生什么。 输入(input):一行输出字符串的 Python 代码。 期待输出(output):在单元执行结果里打印出 hello。 要确认的概念:代码单元既像交互执行那样能立刻看到结果,又会把记录保存在笔记本里。

# 无论从终端还是代码单元运行,用来确认输出的代码都是一样的。
print("hello")

代码单元像交互执行一样,适合立即确认结果。同时,它又能把代码、结果和说明一起保留在笔记本文件中,所以很适合学习。

但代码单元也和脚本文件不同。只要单元执行顺序改变,结果就可能改变;前一个单元里创建的变量,也可能会被后一个单元拿来使用。

如果把三种执行位置再分开,就是下面这样。

  • 交互模式:快速确认一行一行。
  • 脚本文件:把整个文件保存下来并反复运行。
  • 笔记本代码单元:边保留说明和结果,边按单元执行。

以后当练习变长时,就会出现这样的情况:在笔记本里能跑,但搬到脚本里就不行了。 那时就要把单元执行顺序、文件路径、必要的 import、包安装状态分开检查。

python -m 是执行模块的一种方式

在终端里,你会经常看到下面这样的命令。

python -m pip install numpy

这里的 -m,是一种请求 Python 去把某个 模块(module) 当作脚本执行的方式。Python 官方文档说明,python -m module 这种形式会把一个库模块当作脚本运行。

这里先这样理解。

  • python hello.py:运行一个文件。
  • python -m pip ...:通过 Python 去运行名为 pip 的模块。

pip 和包安装会在 P2-7.4 再讲。这里先记住一点:-m 不是 Python 代码语法,而是从终端传给 Python 解释器的执行选项。

执行方式一变,要检查的东西也会跟着变

即使是同样的 Python 代码,只要执行方式不同,先检查的点也会不同。

情况 先检查什么
在交互模式里不工作 我现在是不是在 >>> 提示符里?
脚本文件打不开 当前工作文件夹里有这个文件吗?
找不到 python 命令 Python 装了吗,命令名对吗?
在 Colab 里能跑,本地不行 本地是不是也有同样的文件和包?
搬到脚本里就不行 有没有依赖过笔记本单元执行顺序留下来的值?

这里不会把所有错误解决方法都讲完。重要的是一种视角:只要执行方式不同,收窄错误原因的方法也必须不同。

用案例来看

案例 1. print("hello") 到底该输入在哪里

假设一个刚开始学 Python 的人跟着教程走,把 print("hello") 直接输入到了终端里。在某些环境里,它看起来好像能工作;在另一些环境里,它却报“找不到命令”,让人很慌。

人最开始用的标准通常很像:既然这句跟 Python 有关,那大概随便放哪里都可以。 但现实里,shell 提示符、Python 交互提示符、Colab 代码单元,各自输入的是不同的语言。

这也就是为什么这一节要把 解释器交互模式脚本代码单元 分开。即使它们看起来像在做同一件事,python hello.py 是终端命令,print("hello") 是 Python 代码,而错误原因会因为“输入在什么位置”而不同。

可确认的结果会直接体现在提示符上。如果 print("hello")>>> 里能运行,但在普通 shell 提示符里不能,那么问题就不是 Python 语法,而是你选错了执行位置。

检查清单

  • 能把 Python 解释器(interpreter)解释成读取并执行 Python 代码的程序。
  • 能说明在交互模式(interactive mode)里,Python 代码是输入在 >>> 提示符里的。
  • 能说明脚本(script)是保存在 .py 文件里的执行单位。
  • 能区分 python hello.py 是终端命令,而 print("hello") 是 Python 代码。
  • 能说明 Colab/Jupyter 代码单元会按单元执行 Python 代码。
  • 能说明 python -m pip ... 里的 -m 是终端传给 Python 解释器的执行选项。
  • 能说明运行 Python 时,先要区分当前位置是 shell、Python 提示符还是代码单元,以及自己要执行的是一行、一份文件还是一个笔记本单元。

来源与参考资料

  • Python Software Foundation, General Python FAQ, Python 3.14.6 documentation, 确认日期: 2026-07-20。用于支撑 Python 是解释型、交互式编程语言这一说明,并确认 Guido van Rossum 的早期开发背景。
  • Python Software Foundation, Using the Python Interpreter, Python 3.14.6 documentation, 确认日期: 2026-07-20。用于确认解释器调用、交互模式与脚本文件执行之间的区别。
  • Python Software Foundation, Command line and environment, Python 3.14.6 documentation, 确认日期: 2026-07-20。用于确认 python script.pypython -cpython -m module-name 等命令行执行方式。