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 等指令的反汇编文本(版本不同指令名可能变化)。

结合场景再看三个关注点

  1. 有编译步骤,不是逐行永远从源码解释。
  2. dis 输出依赖版本
  3. 优化应基于测量,不基于“少几条字节码”臆测。

核心概念与准确模型

  1. 解析 → AST → 编译 → code object
  2. 帧(frame)执行字节码
  3. 内建与运行时调用
  4. 其他实现(PyPy)路径不同

边界情况与反直觉行为

  1. eval/exec 动态编译
  2. 生成器/协程 改变帧行为
  3. .pyc 失效 与时间戳/hash 策略

常见误区

[!warning] 常见误区:把 dis 输出当跨版本规范 错误理解:指令序列稳定。
正确模型:教学/调试用,语义以文档为准。

工程实践

  • 性能:算法与 IO > 微观字节码
  • 冷启动关注导入与编译成本

本节总结

执行模型帮助建立“实现层地图”。下一层看对象如何表示与回收。

自测题

  1. .pyc 是什么?
  2. 为何说 GIL 不是执行模型的语言条款?
参考答案
  1. 字节码缓存文件。
  2. 它是 CPython 线程实现细节,不是所有实现的同一叙事。

延伸阅读与资料来源

资料类型支撑内容
Execution model规范命名与执行
dis文档反汇编
创建于 2026/7/15 更新于 2026/7/15