compile(source, filename, mode[, flags[, dont_inherit]])
说明:将 source 编译为代码或 ATS 对象。代码对象能够通过 exec 语句来执行或者 eval() 进行求值。
参数:
- source:字符串或者 ATS 对象。
- filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
- mode:指定编译代码的种类。可以指定为 'exec', 'eval', 'single'。
- flag 和 dont_inherit:可选参数
版本:在 python2.3、2.6、2.7、3.2 中均有不同,使用时要引起注意,兼容 python3
- ATS 对象:Abstract Syntax Tree,抽象语法树,是源代码语法结构的一种抽象表示。https://zhuanlan.zhihu.com/p/26988179
- exec 语句:exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。需要说明的是在 Python2 中exec不是函数,而是一个内置语句(statement)。
- eval() 函数:eval() 函数用来执行一个字符串表达式,并返回表达式的值。
在 python2.7 中的试用:
>>> code = 'for i in range(5): print i'
>>> exec code
0
1
2
3
4
>>> eval(code)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
for i in range(10): print i
^
SyntaxError: invalid syntax
>>> cmpcode = compile(code, '', 'exec')
>>> exec cmpcode
0
1
2
3
4
>>> eval(cmpcode)
0
1
2
3
4
>>> cmpcode
<code object <module> at 0x107843930, file "", line 1>
>>> str = '3 * 4 + 5'
>>> cmpstr = compile(str, '', 'eval')
>>> eval(cmpstr)
17
>>> exec cmpstr
没太明白这个函数的使用场景,有什么好处,回头知道了再来更新,也欢迎知道的同学评论~