核心要点
能描述源码 → 字节码 → 解释执行的链路
知道 .pyc、pycache、compile() 的作用
了解 GIL 对多线程的影响
简要回答
Python 源码经词法/语法分析编译为字节码(.pyc 缓存),由 CPython 虚拟机解释执行;CPython 有 GIL,CPU 密集多线程无法真并行。
标准回答
一、执行链路
- 解析:源码 → AST(抽象语法树)
- 编译:AST → 字节码(bytecode),缓存为
__pycache__/*.pyc - 执行:CPython 虚拟机逐条解释字节码(也可通过 C 扩展加速热点)
可用dis.dis(fn)反汇编查看字节码。
二、实现差异
CPython(参考实现)、PyPy(JIT 更快)、Jython/IronPython 跑在 JVM/.NET 上。
三、GIL(全局解释器锁)
同一时刻仅一个线程执行 Python 字节码。I/O 密集多线程仍有效;CPU 密集应改用 multiprocessing 或 C 扩展/NumPy 释放 GIL。
四、AI 训练
计算在 PyTorch C++/CUDA 层,Python 层多为胶水代码,GIL 影响通常小于 GPU 计算本身。
回答思路
【定义】用一句话说清「Python 代码是如何执行的」
【原理】讲清关键机制或步骤(2~3 点)
【例子】举一个真实项目、论文或产品中的例子
【对比】与易混淆概念或替代方案比较(如有)
【收尾】总结适用场景 + 一个局限或风险
常见误区
⚠️ 常见踩坑
误区一:容易答偏的地方:只罗列名词、不会举例;混淆相似概念;忽略工程约束(成本、延迟、数据质量)。不确定时应主动说明假设。
追问
追问 1:.pyc 文件是什么?何时生成?
.pyc 是编译后的字节码缓存,存于 __pycache__,加速二次导入。源文件 mtime 变化会重新编译。python -O 可生成优化字节码(去掉 assert)。
追问 2:GIL 为什么存在?
简化 CPython 对象模型的线程安全(引用计数等),降低实现复杂度。多进程或调用释放 GIL 的 C 库(NumPy、IO)可绕过 CPU 并行限制。
追问 3:Python 算解释型还是编译型?
二者兼有:先编译成字节码,再解释执行。常说「解释型」指不先整程序编译成机器码。PyPy 在字节码层加 JIT 编译为机器码。
🔗 相似问题
同一考点的不同问法,换着练更稳
延伸学习
按主题分类的相关资源,便于系统复习
