compile()函数将源码编译为代码对象,用于exec或eval执行;支持exec(多语句)、eval(表达式)、single(单行)模式,提升动态代码执行效率,常用于插件系统,需注意安全与模式匹配。

Python 的 compile() 函数用于将字符串形式的代码、AST 对象等编译成可执行的代码对象(code object),这个对象可以被 exec() 或 eval() 执行。它在动态执行代码或构建解释器类功能时非常有用。
基本语法
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)- source:要编译的源代码,可以是字符串、字节串或 AST 对象。
-
filename:源文件名,用于报错时显示。如果代码不是来自文件,通常写为
。 -
mode:指定编译模式,有三种常见值:
-
'exec':适用于多行语句(如函数、循环)。 -
'eval':只能处理单个表达式。 -
'single':用于交互式解释器风格,只处理单条语句或表达式。
-
- flags 和 dont_inherit:控制编译器行为,一般用默认即可。
- optimize:优化级别,-1 表示使用解释器的优化设置。
实际使用示例
1. 使用 exec 模式编译多行代码
source = '''x = 10
y = 20
print(x + y)
'''
code = compile(source, '
exec(code) # 输出: 30
2. 使用 eval 模式计算表达式
expr = '10 * 5 + 3'code = compile(expr, '
result = eval(code)
print(result) # 输出: 53
3. single 模式(类似交互式输入)
Android 基础知识入门 pdf,介绍什么是Android、Android可以完成的功能、Android架构、Android应用程序框架、Android函数库等,从开始安装Android开始,到环境配置,到一步步编写复杂的应用程序,本书将带你了解基础但有内涵的Android入门知识。
立即学习“Python免费学习笔记(深入)”;
code = compile('x = 5', 'exec(code)
print(x) # 输出: 5
常见用途和注意事项
- 当你需要多次执行同一段动态代码时,先 compile 可以提升效率。
- compile 配合
exec可以实现插件式脚本加载。 - 注意安全问题:不要对不可信来源的字符串直接 compile 和执行,可能引发代码注入。
- mode 必须与 source 类型匹配,例如不能用 'eval' 编译赋值语句(会报错)。
基本上就这些。compile 函数本身不执行代码,只是把源码“翻译”成中间形态,真正执行还得靠 exec 或 eval。










