compile() 编译源码为代码对象

最后更新:2026-09-22

compile() 编译源码为代码对象

compile() 把源代码字符串编译成代码对象,可交给 exec() / eval() 执行。

分类内置函数
类型内置函数
Python 版本all

📝 语法

compile(source, filename, mode)

⚙️ 参数

source 必选源代码(字符串、字节串或 AST 对象)。
filename 必选错误信息中显示的文件名;内联源码传 ''。
mode 必选编译模式:'exec' / 'eval' / 'single'。
flags 可选编译器标志位(如 ast.PyCF_ONLY_AST)。(默认值:0)
dont_inherit 可选是否忽略外层编译标志。(默认值:False)
optimize 可选优化级别;-1 表示使用解释器设置。(默认值:-1)

返回值:code 对象,可传给 exec() / eval() 执行。

💥 异常

▶ 示例

编辑下方代码,点击运行,在输出面板查看结果:

运行结果:

3
更多实战案例即将上线,敬请期待。

❓ 常见问题

Qcompile() 的三个 mode 有什么区别?
A'exec' 编译语句块(if、def、for 等),'eval' 编译单个表达式(能求值),'single' 编译单条交互式语句并会打印表达式结果。
Qfilename 参数传什么?
A动态生成的内联代码惯例上传 '';它只出现在报错信息(traceback)里,与实际文件无关,不会真的读取文件。
Qcompile() 之后怎么执行?
A把返回的 code 对象传给 exec(code) 或 eval(code):'exec' 模式的代码对象用 exec,'eval' 模式的用 eval。
Q源码有语法错误会怎样?
A在 compile() 阶段就抛 SyntaxError,比直接 exec 字符串更早暴露问题,适合“先编译校验、后执行”的场景。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏