Python 执行模型概览
源码编译为字节码并由虚拟机执行;区分语言语义与 CPython 实现路径。
#type / concept
#status / growing
#tech / dev
#resource / python
#tech / lang / python
[!info] 关联笔记
Python 执行模型概览
这个概念为什么出现
“Python 是解释型语言”过于粗糙。理解 编译到字节码 + 虚拟机执行 有助于读懂 .pyc、性能讨论与 dis 输出,同时避免把 CPython 细节写成语言承诺。
[!abstract] 一句话理解 CPython 将模块编译为字节码(可缓存为
.pyc),由评估循环解释执行;语义以语言参考为准,管线细节属实现。
最小可观察示例
场景:用 dis 看一句业务表达式的字节码
# dis_price_expr.py
# 业务意图:观察折扣表达式的字节码层级(教学)。
# 教学点:源码 -> 字节码;dis 是实现观察工具。
import dis
def discounted(price: int) -> int:
return price * 90 // 100
if __name__ == "__main__":
dis.dis(discounted)
建议运行:
python dis_price_expr.py
期望输出:包含 RESUME/LOAD/BINARY 等指令的反汇编文本(版本不同指令名可能变化)。
结合场景再看三个关注点
- 有编译步骤,不是逐行永远从源码解释。
dis输出依赖版本。- 优化应基于测量,不基于“少几条字节码”臆测。
核心概念与准确模型
- 解析 → AST → 编译 → code object
- 帧(frame)执行字节码
- 内建与运行时调用
- 其他实现(PyPy)路径不同
边界情况与反直觉行为
- eval/exec 动态编译
- 生成器/协程 改变帧行为
- .pyc 失效 与时间戳/hash 策略
常见误区
[!warning] 常见误区:把 dis 输出当跨版本规范 错误理解:指令序列稳定。
正确模型:教学/调试用,语义以文档为准。
工程实践
- 性能:算法与 IO > 微观字节码
- 冷启动关注导入与编译成本
本节总结
执行模型帮助建立“实现层地图”。下一层看对象如何表示与回收。
自测题
.pyc是什么?- 为何说 GIL 不是执行模型的语言条款?
参考答案
- 字节码缓存文件。
- 它是 CPython 线程实现细节,不是所有实现的同一叙事。
延伸阅读与资料来源
| 资料 | 类型 | 支撑内容 |
|---|---|---|
| Execution model | 规范 | 命名与执行 |
| dis | 文档 | 反汇编 |