核心要点

  • 能描述源码 → 字节码 → 解释执行的链路

  • 知道 .pyc、pycache、compile() 的作用

  • 了解 GIL 对多线程的影响

简要回答

Python 源码经词法/语法分析编译为字节码(.pyc 缓存),由 CPython 虚拟机解释执行;CPython 有 GIL,CPU 密集多线程无法真并行。

标准回答

一、执行链路

  1. 解析:源码 → AST(抽象语法树)
  2. 编译:AST → 字节码(bytecode),缓存为 __pycache__/*.pyc
  3. 执行: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 点)

  • 【例子】举一个真实项目、论文或产品中的例子

  • 【对比】与易混淆概念或替代方案比较(如有)

  • 【收尾】总结适用场景 + 一个局限或风险

延伸学习

结合侧栏延伸学习中的知识库与术语;行业背景见 AI 资讯(永久保留)。相关:资讯

常见误区

⚠️ 常见踩坑

误区一:容易答偏的地方:只罗列名词、不会举例;混淆相似概念;忽略工程约束(成本、延迟、数据质量)。不确定时应主动说明假设。

追问

追问 1.pyc 文件是什么?何时生成?

.pyc 是编译后的字节码缓存,存于 __pycache__,加速二次导入。源文件 mtime 变化会重新编译。python -O 可生成优化字节码(去掉 assert)。

追问 2GIL 为什么存在?

简化 CPython 对象模型的线程安全(引用计数等),降低实现复杂度。多进程或调用释放 GIL 的 C 库(NumPy、IO)可绕过 CPU 并行限制。

追问 3Python 算解释型还是编译型?

二者兼有:先编译成字节码,再解释执行。常说「解释型」指不先整程序编译成机器码。PyPy 在字节码层加 JIT 编译为机器码。

🔗 相似问题

同一考点的不同问法,换着练更稳

延伸学习

按主题分类的相关资源,便于系统复习