exec 执行储存在字符串或文件中的 Python 语句。
语法:exec(object[, globals[, locals]])
参数:
object:表示需要被指定的Python代码
globals:表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。
locals:表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与globals相同的值。
返回值:None
单行语句
复制
exec(‘print(“Hello world!”)’)
多行语句
注:1.用三引号括起来;2.注意语句的换行空格
复制
exec(“””
for i in range(3):
print(i)
“””)
三个参数
注意全局变量和局部变量的变化
复制
g = {
‘x’: 1,
‘y’: 2
}
l = {}
exec(‘’’
global x,z
x=100
z=200
m=300
‘’’, g, l)
print(g) # {‘x’: 100, ‘y’: 2,’z’:200,……}
print(l) # {‘m’: 300}
exec语句用来执行存储在代码对象、字符串、文件中的Python语句,eval语句用来计算存储在代码对象或字符串中的有效的Python表达式,而compile语句则提供了字节编码的预编译。
当然,需要注意的是,使用exec和eval一定要注意安全性问题,尤其是网络环境中,可能给予他人执行非法语句的机会。
1.exec
格式:exec obj
obj对象可以是字符串(如单一语句、语句块),文件对象,也可以是已经由compile预编译过的代码对象。
下面是相应的例子:
Python可执行对象之exec使用举例Python
exec “print ‘pythoner.com’”
pythoner.com
exec “"”for i in range(5):
… print “iter time: %d” % i
… “””
iter time: 0
iter time: 1
iter time: 2
iter time: 3
iter time: 4
exec “print ‘pythoner.com’”
pythoner.com
exec “"”for i in range(5):
… print “iter time: %d” % i
… “””
iter time: 0
iter time: 1
iter time: 2
iter time: 3
iter time: 4
代码对象的例子放在第3部分一起讲解。
2.eval
格式:eval( obj[, globals=globals(), locals=locals()] )
obj可以是字符串对象或者已经由compile编译过的代码对象。globals和locals是可选的,分别代表了全局和局部名称空间中的对象,其中globals必须是字典,而locals是任意的映射对象。
下面仍然举例说明:
Python可执行对象之evalPython
x = 7
eval( ‘3 * x’ )
21
1
2
3
x = 7
eval( ‘3 * x’ )
21
3.compile
格式:compile( str, file, type )
compile语句是从type类型(包括’eval’: 配合eval使用,’single’: 配合单一语句的exec使用,’exec’: 配合多语句的exec使用)中将str里面的语句创建成代码对象。file是代码存放的地方,通常为”。
compile语句的目的是提供一次性的字节码编译,就不用在以后的每次调用中重新进行编译了。
还需要注意的是,这里的compile和正则表达式中使用的compile并不相同,尽管用途一样。
下面是相应的举例说明:
Python可执行对象之compilePython
eval_code = compile( ‘1+2’, ‘’, ‘eval’)
eval_code
<code objectat 0142ABF0, file "", line 1>
eval(eval_code)
single_code = compile( ‘print “pythoner.com”’, ‘’, ‘single’ )
single_code
<code objectat 01C68848, file "", line 1>
exec(single_code)
pythoner.com
exec_code = compile( “"”for i in range(5):
… print “iter time: %d” % i”””, ‘’, ‘exec’ )
exec_code
<code objectat 01C68968, file "", line 1>
exec(exec_code)
iter time: 0
iter time: 1
iter time: 2
iter time: 3
iter time: 4
eval_code = compile( ‘1+2’, ‘’, ‘eval’)
eval_code
<code objectat 0142ABF0, file "", line 1>
eval(eval_code)
3
single_code = compile( ‘print “pythoner.com”’, ‘’, ‘single’ )
single_code
<code objectat 01C68848, file "", line 1>
exec(single_code)
pythoner.com
exec_code = compile( “"”for i in range(5):
… print “iter time: %d” % i”””, ‘’, ‘exec’ )
exec_code
<code objectat 01C68968, file "", line 1>
exec(exec_code)
iter time: 0
iter time: 1
iter time: 2
iter time: 3
iter time: 4
http://www.360doc.com/content/19/0615/08/58190678_842550014.shtml
https://www.runoob.com/python/python-func-exec.html
https://blog.csdn.net/ipi715718/article/details/81534195