17370845950

python compile函数怎么用?
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':用于交互式解释器风格,只处理单条语句或表达式。
  • flagsdont_inherit:控制编译器行为,一般用默认即可。
  • optimize:优化级别,-1 表示使用解释器的优化设置。

实际使用示例

1. 使用 exec 模式编译多行代码

source = '''
x = 10
y = 20
print(x + y)
'''
code = compile(source, '', 'exec')
exec(code) # 输出: 30

2. 使用 eval 模式计算表达式

expr = '10 * 5 + 3'
code = compile(expr, '', 'eval')
result = eval(code)
print(result) # 输出: 53

3. single 模式(类似交互式输入)

code = compile('x = 5', '', 'single')
exec(code)
print(x) # 输出: 5

常见用途和注意事项

  • 当你需要多次执行同一段动态代码时,先 compile 可以提升效率。
  • compile 配合 exec 可以实现插件式脚本加载。
  • 注意安全问题:不要对不可信来源的字符串直接 compile 和执行,可能引发代码注入。
  • mode 必须与 source 类型匹配,例如不能用 'eval' 编译赋值语句(会报错)。

基本上就这些。compile 函数本身不执行代码,只是把源码“翻译”成中间形态,真正执行还得靠 exec 或 eval。