第 1 章 · Python 是什么 & 为什么火

5 个交互式演示,亲手体验 Python 从源码到执行的全过程

演示 1:源码 → AST → 字节码 → PVM → 输出

Python 不是直接"逐行执行"源码,而是经过 5 个阶段的转换。点击下方按钮,逐步推进流水线,看每一步的产物。

📄
1. 源代码
hello.py
🔤
2. 词法分析
Tokens
🌳
3. 语法分析
AST 树
⚙️
4. 编译
字节码 .pyc
🚀
5. PVM 执行
输出结果
演示源码:x = 1 + 2; print(x)
点击"下一步"开始演示...
💡 关键点:步骤 2-4 在 Python 第一次加载模块时完成,结果会缓存到 __pycache__/*.pyc。 下次运行如果源文件没改,直接读 .pyc 跳过编译,启动更快。

演示 2:PVM 是怎么"算"出 1+2=3 的?

Python 虚拟机是一个基于栈的虚拟机。每条字节码都在操纵一个"操作数栈"。点击"执行下一条指令"看栈的变化:

字节码指令序列
操作数栈 (栈顶在上)
栈底
📦 命名空间 (变量表):{}
💡 这就是为什么 CPython 也叫"栈式虚拟机"。Java 的 JVM 也是栈式;Lua 的虚拟机是寄存器式(不同设计)。

演示 3:Python 不是只有一个 - 5 大实现家谱

"Python" 其实是一份语言规范,下面这些都是它的实现。日常用 CPython 即可,其他实现是"特殊场景才考虑"。

CPython

用 C 语言实现
官方版本、事实标准、生态最完整。99% 的场景都用它。

✅ pip 装包就是给它装
❌ 有 GIL 限制
默认推荐

PyPy

用 RPython 实现
带 JIT 即时编译,运行长时间循环明显快 4-10 倍。

✅ 数学密集型脚本
❌ 部分 C 扩展不兼容

Jython

用 Java 实现
编译为 JVM 字节码,无 GIL,可调用任意 Java 库。

✅ 嵌入 Java 项目
❌ 仅支持 Python 2.7(停滞)

IronPython

用 C# 实现
运行在 .NET CLR 上,访问 .NET 类库。

✅ Windows 桌面集成
❌ 小众、更新缓慢

MicroPython

精简 C 实现
仅需 256KB 内存就能跑,可直接控制硬件 GPIO。

✅ 单片机 / 物联网
❌ 阉割部分标准库
💡 一个常见误解:以为 PyPy 是 "Python 写的 Python"。实际上它用的是 RPython(Restricted Python,Python 的一个静态子集),最终也是编译成本地代码。

演示 4:Python 到底有多慢?

用同样的"100 万次空循环"任务,比一比 4 种语言/实现的速度(数据近似真实基准)。点击下方按钮开始动画:

C (gcc -O2)
- ms
Java (JIT)
- ms
PyPy
- ms
Node.js (V8)
- ms
CPython 3.12
- ms
💡 看到 Python 又慢又流行了?因为:
1) 大部分 Python 程序的瓶颈是 IO(网络/磁盘),不是 CPU——这种场景 Python 速度足够
2) Python 的"快"是开发速度,1 行抵 C 语言 10 行
3) 真要算得快,调 numpy/pandas/PyTorch,底层是 C++/CUDA,纯 Python 只是"调度员"

演示 5:浏览器里的 Python REPL(模拟)

在下面输入框输入简单的 Python 表达式,模拟 REPL 的"读 → 求值 → 打印 → 循环"。注意这是简化版,仅支持基础算术、字符串、内置函数。

Python 3.10+ 模拟 REPL
输入表达式回车,看看结果
>>>
快速试一试:
💡 真实的 REPL 用法:终端输入 pythonpython3 进入。 输入 exit() 或按 Ctrl+D 退出。
推荐用 ipython 替代默认 REPL(语法高亮、智能补全、多行编辑)。