← [ BACK_TO_NOTES ]

Python 执行模型概览

以 CPython 的编译、code object 与字节码执行为例,区分语言语义与实现路径。

#concept #growing #dev #python #python

[!info] related notes

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 接收源码字符串时会编译,也可直接接收已有 code object。
  2. 生成器/协程 改变帧行为
  3. .pyc 是导入时可用的 code object 缓存,不是机器码,也不缓存运行结果;缓存有效性按时间戳或 hash 策略检查。写入可能禁用或因权限失败,不影响从源码执行。

常见误区

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

工程实践

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

本节总结

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

自测题

  1. .pyc 是什么?
  2. 为何说 GIL 不是执行模型的语言条款?
参考答案
  1. 字节码缓存文件。
  2. 它是实现与构建选项,不是语言条款;CPython 也有 free-threaded 构建。

延伸阅读与资料来源

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

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本