1. compile()
compile()可以在程序运行时刻迅速生成代码对象,然后可用exec 语句或eval()函数来执行这些对象或对其进行求值。
eval() 和 exec都可以执行字符串格式的python代码,但每次都必须对这些代码进行字节编译。
而compile()刚好提供了一次性字节代码预编译,之后的调用,都不用重复编译,有助于改善性能。
一般先由compile()函数对代码进行编译,返回一个code对象,然后由exec 或eval()执行。
compile 有三个参数,都是必须的:
(1)待编译的python代码。
(2)存放代码对象的文件名,通常为空。
(3)表明代码对象类型的字符串。
'eval' 可求值的表达式。[与eval()一起使用]
mycode = compile('100+200', '', 'eval')
print(type(mycode))
print(eval(mycode))
# 运行结果
300
'single' 单一执行语句。[与exec一起使用]
'exec' 可执行语句组。[与exec一起使用]
my_code = compile("""
for i in range(4):
print(i)
""", '', 'exec')
exec my_code
print(type(my_code))
# 运行结果
0
1
2
3
2. eval()
对表达式求值(字符串或compile()预编译代码对象),
eval("2*3")
3. exec() 与 execfile() 执行文件对象
在python中读取其他python脚本内容并执行
with open('tt.py', 'r') as f:
exec f
或
execfile('tt.py')
或
python tt.py # 在命令行环境下
# 以上方式均等价
python -c
python -m