本节摘要:搭好 Python 3.10+ 环境,理解"解释器、REPL、脚本、字节码"四者的关系,并跑起第一段带实证性质的小实验。学完这节,你拥有的不只是环境,而是一个可以做"解释器实验"的工作台。
很多入门书直接教你 print("Hello"),但从不回答一个更基本的问题:你敲下回车之后,机器里发生了什么?这个问题决定了你对"解释型语言"的全部直觉。
Python 不像 C 那样把源码编译成机器码再运行,也不是逐字符地"边看边执行"。它走一条中间路线:
这个流水线可以从实验侧验证:任何 .py 文件的字节码都能用标准库的 dis 模块打印出来。后面我们会反复用这招。

到 Python 官网下载安装包即可,Windows 安装时务必勾选"Add Python to PATH"。装完在终端验证:
$ python --version Python 3.12.4
版本上我的建议很明确:新项目直接用 3.10 或更高。3.8 已停止官方维护,而 3.10 引入的结构模式匹配、3.11 的大幅提速、3.12 的更好报错信息,对学习体验影响很大。本教程代码基于 3.10+ 语法(如 list[int] 直接写法),在 3.8 上部分会报错。
多版本共存怎么办?Windows 上有启动器 py:py -3.11 指定版本;macOS 与 Linux 可用 pyenv 管理多个版本。验证当前解释器位置与搜索路径:
>>> import sys >>> sys.executable # 当前解释器的可执行文件 '/usr/bin/python3' >>> sys.path[:3] # 模块搜索路径的开头几项 ['', '/usr/lib/python312.zip', '/usr/lib/python3.12']
sys.path 先睹为快——第 5 章讲导入机制时,它就是主角。
编辑器选谁不是原则问题。VS Code 加官方 Python 插件足够轻快;PyCharm 对大项目重构更顺手;学习阶段我更推荐你常开一个 REPL 窗口,随手验证,比任何"保存-运行"循环都快。
在终端输入 python(Windows 下 py)进入交互式环境,提示符变成三个箭头:
>>> 2 ** 100 1267650600228229401496703205376
注意这个结果:Python 的 int 没有溢出。C 语言里 long long 到 2 的 63 次方就翻车,Python 的整数是任意精度的对象——这是"数字也是对象"的第一个直接好处。
REPL 还有几个值得现在就记住的技巧:
_ 里,_ + 1 可以接着算;help(len) 查某个内置函数的文档;dir(str) 列出字符串类型的全部属性,配合 help 就是免费的 API 手册;exit() 或 Ctrl-D(Windows 下 Ctrl-Z 加回车)。把下面几行存成一个文件(文件名任意,比如叫 first.py,注意别叫 list.py 这类与内置模块撞名的名字):
import sys print("解释器版本:", sys.version.split()[0]) print("平台:", sys.platform) name = "Pythonista" print(f"你好, {name}") # 第一个“解释器实验”:看看 print 前后名字的踪迹 x = 1000 print("x 的身份:", id(x)) y = x # 这不是拷贝!下一节会解释 print("y 的身份:", id(y), "与 x 相同:", y is x)
用 python first.py 运行,你会看到类似输出:
解释器版本: 3.12.4 平台: win32 你好, Pythonista x 的身份: 140234849363248 y 的身份: 140234849363248 与 x 相同: True
身份那串数字每次运行都不同(它是内存地址的抽象),但"与 x 相同: True"稳定出现——y = x 之后两个名字指向同一个对象。如果你以前以为赋值是复制值,这个实验就是本教程给你的第一次世界观修正。完整的解释在 1.3 节。
用 dis 看看一个极简函数被编译成了什么:
>>> import dis >>> def add(a, b): ... return a + b >>> dis.dis(add) 2 0 RESUME 0 3 2 LOAD_FAST 0 (a) 4 LOAD_FAST 1 (b) 6 BINARY_OP 0 (+) 10 RETURN_VALUE
不用看懂每条指令,只注意一件事:a + b 编译成了"取出 a、取出 b、做加法"三条指令,由虚拟机逐条执行。这就是"Python 是解释执行"的准确含义——性能问题的直觉也从此有据可依:解释器每条指令都要做类型检查、对象查找,比直接跑机器码慢是结构性的(3.11 之后有专门优化,但量级关系不变)。
⚠️ 常见坑:在 REPL 里写多行循环或函数定义时,空行会提前结束块;务必保持缩进连贯。另一个新手高频坑是文件名撞内置模块名——比如文件叫
random.py,然后import random导入的就是它自己,报出AttributeError: partially initialized module。看到这个报错,先改名。
💡 关键直觉:把 REPL 当显微镜而不是计算器。每次学一个新概念,就在 REPL 里戳它一下——
type、id、dir、dis四件套,是贯穿本教程的实验工具。
.pyc 只是字节码缓存,不是机器码。sys.executable 与 sys.path 是诊断环境问题的第一现场。_、help()、dir() 是免费文档系统;dis 让你看见解释器的真实动作。y = x 后 id 相同、is 为 True——下一节把它讲透。下一节我们正式拆开对象模型:身份、类型、值三要素,以及"type 的类型还是 type"这个自举怪圈。