讲师中心 微信公众号
AI工具推荐 视频效率加速

Python解释器执行原理_源码到字节码流程

小墨姑娘_8370

小墨姑娘_8370

发布时间:2026-03-07 17:20:03

|

532人浏览过

|

来源于php中文网

原创

Python执行采用“编译+解释”混合机制:先将源码经词法分析、语法分析、语义分析生成字节码,再由PVM逐条执行;字节码存于.pyc文件中含魔数、时间戳及marshal序列化code对象,PVM基于栈和帧结构执行并受GIL约束。

python解释器执行原理_源码到字节码流程

Python解释器执行代码时,并不是直接运行源码,而是先将.py文件编译为字节码(bytecode),再由Python虚拟机(PVM)逐条解释执行。这个“编译+解释”的混合机制,是理解Python性能、调试和底层行为的关键。

源码如何变成字节码

当你运行 python script.py 时,解释器会做以下事情:

  • 词法分析:把源码按规则切分成token(如 def、+、变量名等)
  • 语法分析:用语法规则(如Grammar)构建抽象语法树(AST)
  • 语义分析与优化:检查作用域、常量折叠(如 2 + 3 → 5)、删除无用代码等
  • 生成字节码:遍历AST,为每个操作生成对应的字节码指令(如 LOAD_CONST、BINARY_ADD)

这个过程发生在内存中,除非启用了缓存(.pyc文件),否则不落盘。你可以用 compile() 函数手动触发编译:

>>> code = compile("x = 1 + 2", "", "exec")
>>> code.co_code # 字节码原始bytes

字节码长什么样

字节码是一系列操作码(opcode)和参数组成的序列,每条指令通常占2字节(1字节操作码 + 1字节参数,参数可扩展)。例如:

立即学习“Python免费学习笔记(深入)”;

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载
>>> def f(): return 1 + 2
>>> import dis
>>> dis.dis(f)
1 0 LOAD_CONST 1 (3)
2 RETURN_VALUE

这里 LOAD_CONST 1 表示从常量表(co_consts)中取出索引为1的值(即3),RETURN_VALUE 表示返回栈顶值。注意:1 + 2 已被编译期优化为常量3,不会生成 BINARY_ADD。

.pyc 文件是怎么来的

为了加速后续导入,Python会在首次导入模块时,把字节码写入 __pycache__/xxx.cpython-3X.pyc。它不是纯字节码,而是一个带头部的封装文件:

  • 前4字节:Python版本魔数(magic number),用于校验兼容性
  • 接下来8字节:时间戳(源码修改时间)和文件大小,用于判断是否过期
  • 剩余部分:marshal序列化的code对象(含字节码、常量、名字、变量信息等)

运行 python -B script.py 可禁用.pyc生成;python -O 还会丢弃assert和__debug__相关字节码。

PVM 如何执行字节码

Python虚拟机本质是一个大循环(eval_frame_loop),对当前帧(frame)的字节码逐条取指、解码、执行。关键点包括:

  • 每个函数调用都创建新帧对象,维护自己的局部变量、栈、指令指针(f_lasti)
  • 操作基于栈:比如 LOAD_FAST x 把局部变量x压栈,STORE_FAST y 弹出栈顶存入y
  • 遇到跳转指令(如 JUMP_IF_FALSE_OR_POP)会修改指令指针,实现分支/循环
  • GIL(全局解释器锁)在此层生效,确保同一时刻只有一个线程执行字节码

虽然叫“解释器”,但现代CPython也做了不少优化:例如自适应的快速路径、内联缓存(针对属性访问)、以及即将在3.13中落地的“字节码专用JIT预编译”实验性支持。

热门AI工具

更多
创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1891

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

5224

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1829

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

31557

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3727

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3747

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1263

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn