Python compile()函数
时间:2020-02-23 14:42:32 来源:igfitidea点击:
Python compile()函数用于将源代码编译为代码对象或者AST模块对象。
可以根据提供的模式使用exec()或者eval()函数执行返回的代码对象,以构造代码对象。
Python compile()
Python compile()函数语法为:
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
让我们看一下compile()函数参数。
source:用于创建代码对象的Source。
这可以是字符串,字节字符串或者AST模块对象。文件名:如果您正在从文件中读取代码字符串,则应在此处提供其名称以供参考。
它不是用于创建代码对象,而是用于使代码可读。模式:此参数指定代码的类型。
允许的值是exec,eval和single。
如果源包含多个python语句,请使用exec。
如果source是单个python表达式,请使用eval。
如果源由单个交互式语句组成,则使用单个。可选参数
flags
和dont_inherit
控制将来的哪些语句会影响源代码的编译。
如果两者都不存在(或者两者都不为零),则使用在调用compile()的代码中有效的将来的语句对代码进行编译。参数" optimize"指定编译器的优化级别。
Python compile()示例
让我们看一下具有不同来源的compile()函数示例。
将字符串源编译为代码
# compile() with string source code_str = 'x=5\ny=10\nprint("sum =",x+y)' code = compile(code_str, 'sum.py', 'exec') print(type(code)) exec(code)
输出:
<class 'code'> sum = 15
请注意,编译函数的返回类型为"代码"对象。
另外,我们在这里使用exec(),因为源字符串包含多个python语句。
请注意,代码对象正在由exec()函数执行,并且" sum = 15"正在控制台中打印。
从文件读取代码并进行编译
假设我们有以下内容的" my_code.py"文件。
x = 10 y = 20 print('Multiplication = ', x * y)
我们可以将此文件内容作为字符串读取,并将其编译为代码对象并执行。
# reading code from a file f = open('my_code.py', 'r') code_str = f.read() f.close() code = compile(code_str, 'my_code.py', 'exec') exec(code)
用eval() compile()
我们来看一个将python表达式编译为代码并使用eval()函数执行该代码的示例。
# eval example x = 5 code = compile('x == 5', '', 'eval') result = eval(code) print(result) code = compile('x + 5', '', 'eval') result = eval(code) print(result)
输出:
True 10
带字节字符串源的compile()
让我们看一个使用字节字符串作为源的示例。
bytes_str = bytes('x == 5', 'utf-8') print(type(bytes_str)) code = compile(bytes_str, '', 'eval') result = eval(code) print(result)
输出:
<class 'bytes'> True
使用AST对象进行compile()
让我们看一个使用AST对象和compile()函数的示例。
import ast ast_object = ast.parse("print('Hello world!')") print(type(ast_object)) code = compile(ast_object, filename="", mode="exec") print(type(code)) exec(code)
输出:
<class '_ast.Module'> <class 'code'glt; Hello world!