exec eval compile区别:
exec 执行python代码,无论是存储在对象/文件/字符串内都可执行
eval 执行存储于对象或字符串内的python表达式
compile 对代码预编译,可防止重复编译一段代码
exec
格式:exec obj
代码:
>>> exec '''for i in range(3): ... print i ... ''' 0 1 2
1
2
3
4
5
6
7
|
>>>
exec
'''for i in range(3):
... print i
... '''
0
1
2
|
eval
格式:eval( obj[, globals=globals(), locals=locals()] ) 全局变量和局部变量
代码:
>>> a = 2 >>> eval('a * 5') 10
1
2
3
4
|
>>>
a
=
2
>>>
eval
(
'a * 5'
)
10
|
compile
格式:compile( str, file, type) file代码存放地方 type有三类:eval single配合单一语句exec使用 exec配合exec多语句使用
代码:
# 执行python表达式 >>> eval_code = compile('3 * 4', '', 'eval') >>> eval(eval_code) 12 # 执行python单一语句 >>> single_code = compile('print "hello word!"', '', 'single') >>> exec(single_code) hello word! # 执行python多条语句 >>> exec_code = compile("""for i in range(5): ... print i""", '', 'exec') >>> exec(exec_code) 0 1 2 3 4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 执行python表达式
>>>
eval_code
=
compile
(
'3 * 4'
,
''
,
'eval'
)
>>>
eval
(
eval_code
)
12
# 执行python单一语句
>>>
single_code
=
compile
(
'print "hello word!"'
,
''
,
'single'
)
>>>
exec
(
single_code
)
hello
word
!
# 执行python多条语句
>>>
exec_code
=
compile
(
"""for i in range(5):
... print i"""
,
''
,
'exec'
)
>>>
exec
(
exec_code
)
0
1
2
3
4
|