eval() exec() compile()
eval():执行一个字符串表达式,并返回表达式的值
exec():执行一个字符串表达式,没有返回值
exec('print(123)')
eval('print(123)')
print(eval('1+2+3+4')) # 有返回值
print(exec('1+2+3+4')) #没有返回值
'''
123
123
10
None
'''
compile():将一个字符串编译为字节代码
compile(source, filename, mode)
1. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。
2. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。
3. 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为'single'。
code1 = 'for i in range(0,10): print (i)'
compile1 = compile(code1,'','exec')
exec(compile1)
code2 = '1 + 2 + 3 + 4'
compile2 = compile(code2,'','eval')
print(eval(compile2))
code3 = 'name = input("please input your name:")'
compile3 = compile(code3,'','single')
exec(compile3) #执行时显示交互命令,提示输入
print(name)
name #执行后name变量有值
"'pythoner'"