compile函数允许程序员在运行时刻迅速生成代码对象,然后就可以用exec语句或者内建函数eval 来执行这些对象或者对它们进行求值。一个很重要的观点是:exec和eval者可以执行字符串格式的Python代码。
这也是与c++等静态语言最重要的区别。
compile的三个参数都是必须的,第一参数代表了要编译的Python代码。第二个字符串,虽然是必须的,但通常被置为空串。最后的参数是个字符串,它用来表明代码对象的类型。有三种可能值:
‘eval’ 可求值的表达式,和eval一起使用
‘single’ 单一可执行语句,和exec一起使用
‘exec’ 可执行语句组,和exec一起使用。
1、可求值表达式
eval_code = compile('100 + 200', '', 'eval')
print eval(eval_code)
300
2、单一可执行语句:
single_code = compile('print "Hello world!"', '', 'single')
exec single_code
Hello world!
3、可执行语句组:
exec_code = compile("""
req = input('Count how many numbers? ')
for eachNum in range(req):
print eachNum
""", '', 'exec')
exec exec_code
Count how many numbers? 0
1
2
3
4
5