📌  相关文章
📜  Python compile()(1)

📅  最后修改于: 2023-12-03 15:18:54.336000             🧑  作者: Mango

Python compile()函数介绍

1. 简介

compile()函数是Python中的内置函数,用于将源代码编译为字节码对象或AST对象。该函数返回一个可执行的代码对象(code object)或者将源代码编译为AST对象(Abstract Syntax Tree)。

2. 语法

comp_code = compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

3. 参数
  • source: 字符串,表示需要编译的源代码;
  • filename: 字符串,表示代码文件名,如果没有,则传入<string>
  • mode: 字符串,表示编译代码的模式,可选值为 'exec', 'eval', 'single'。
    • 'exec':编译一组语句,并执行它们;
    • 'eval':编译一个表达式,并返回它的值;
    • 'single':编译一条语句,但不执行它。
  • flags:可选,标志参数,可以是任何解释器变量(例如负载、debug 基准);
  • dont_inherit:布尔值,如果设置为 True,表示不继承受传递到 compile()中的任何标志或设置;
  • optimize:整数,控制是否应该优化生成的代码,默认值是-1,表示使用与解释器相同的级别的优化。
4. 返回值

compile()函数返回一个代码对象( code object )或者将源代码编译为 AST 对象( Abstract Syntax Tree )。

如果 mode = 'exec',返回的是 code object 对象;

如果 mode = 'eval'mode = 'single',返回的则是 AST 对象。

5. 示例
1. 返回代码对象
source_code = 'print("hello world")'
compiled_code = compile(source_code, 'hello.py', 'exec')
exec(compiled_code)

以上代码将字符串 source_code 编译为可执行的 code object 对象,执行该对象,结果将打印 "hello world"

2. 返回 AST 对象
source_code = 'x = 1\ny = 2\nz = x + y'
compiled_code = compile(source_code, 'test', 'exec', ast.PyCF_ONLY_AST)
print(compiled_code)

以上代码将字符串 source_code 编译为 AST 对象,并将该对象打印出来。

6. 注意事项
  • 当执行 compile()时,如果源代码中有语法错误,将抛出 SyntaxError 异常;
  • compile() 函数是一个危险的函数,因为它可以编译任何python代码,包括恶意代码,应该谨慎使用该函数,确保只有受信任的代码得到了执行。