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

将 source 编译成代码或 AST 对象。代码对象可以被 exec() 或 eval() 执行。source 可以是常规的字符串、字节字符串,或者 AST 对象。参见 ast 模块的文档了解如何使用 AST 对象。

filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值(经常会使用 ‘<string>‘)。

mode 实参指定了编译代码必须用的模式。如果 source 是语句序列,可以是 ‘exec’;如果是单一表达式,可以是 ‘eval’;如果是单个交互式语句,可以是 ‘single’。(在最后一种情况下,如果表达式执行结果不是 None 将会被打印出来。)

可选参数 flags 和 dont_inherit 控制在编译 source 时要用到哪个 future 语句。 如果两者都未提供(或都为零)则会使用调用 compile() 的代码中有效的 future 语句来编译代码。 如果给出了 flags 参数但没有 dont_inherit (或是为零) 则 flags 参数所指定的 以及那些无论如何都有效的 future 语句会被使用。 如果 dont_inherit 为一个非零整数,则只使用 flags 参数 — 在调用外围有效的 future 语句将被忽略。

Future 语句使用比特位来指定,多个语句可以通过按位或来指定。具体特性的比特位可以通过 future 模块中的 _Feature 类的实例的 compiler_flag 属性来获得。

optimize 实参指定编译器的优化级别;默认值 -1 选择与解释器的 -O 选项相同的优化级别。显式级别为 0 (没有优化;debug 为真)、1 (断言被删除, debug 为假)或 2 (文档字符串也被删除)。

如果编译的源码不合法,此函数会触发 SyntaxError 异常;如果源码包含 null 字节,则会触发 ValueError 异常。

如果您想分析 Python 代码的 AST 表示,请参阅 ast.parse()。

注解:

在 'single' 或 'eval' 模式编译多行代码字符串时,输入必须以至少一个换行符结尾。 这使 code 模块更容易检测语句的完整性。

警告:

在将足够大或者足够复杂的字符串编译成 AST 对象时,Python 解释器有可以因为 Python AST 编译器的栈深度限制而崩溃。

在 3.2 版更改: 允许使用 Windows 和 Mac 的换行符。在 ‘exec’ 模式不再需要以换行符结尾。增加了 optimize 形参。

在 3.5 版更改: 之前 source 中包含 null 字节的话会触发 TypeError 异常。

参数:

  • source — 字符串或者AST(Abstract Syntax Trees)对象。
  • filename — 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
  • mode — 指定编译代码的种类。可以指定为 exec, eval, single。
  • flags — 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
  • flags和dont_inherit是用来控制编译源码时的标志。

实例:

str = "for i in range(0, 10):print(i)"
a = compile(str, "", "exec")
print(a)
print(exec(a))

str = "3 * 4 + 5"
b = compile(str, "", "eval")
print(b)
print(eval(b))

以上代码输出结果为:

<code object <module> at 0x0000021F3AFC40C0, file "", line 1>
0
1
2
3
4
5
6
7
8
9
None
<code object <module> at 0x0000021F3AFC4300, file "", line 1>
17
0条评论

相关推荐

Python标准库——文本处理

对Python程序员来说,最显而易见的文本处理工具就是str类,不过除此以...

标准库 2019-05-25 16:30:08

Collections内置库

python collections内置库学习资料

标准库 2019-05-31 14:36:15

Python标准库——日期和时间

不同于int、float和str,Python 没有包含对应日期和时间的原...

标准库 2019-05-31 14:36:30

Python标准库——加密

加密可以保护消息安全,以便验证其正确性并保护消息不被截获。Python的加...

标准库 2019-06-03 10:21:54

Python标准库——文件系统

Python的标准库包括大量工具,可以处理文件系统中的文件,构造和解析文件...

标准库 2019-06-03 14:53:37