示例先行之exec()、eval()
注:使用Python2作示例,2与3有区别,后文会提,其实区别没那么大。
执行以下代码:
#coding:utf-8
#eval():
#eval() 函数用来执行一个字符串表达式,并返回表达式的值。
print '-----------------eval------------------'
a=10
b=60
c=eval('a+b')
print c
print '-----------------exec------------------'
#exec():
#python2中exec()exec不是函数,而是一个内置语句(statement)。
#但是Python 2中有一个 execfile() 函数。
#可以理解为 Python 3 把 exec 这个 statement 和 execfile() 函数的功能够整合到一个新的 exec() 函数中去了。
exec 'print "Hello World"'
# 单行语句字符串
exec "print 'runoob.com'"
# 多行语句字符串
exec """for i in range(5):print "iter time: %d" % i"""
运行结果:
eval&exec运行结果测试
示例先行之complie()
执行以下代码:
#coding:utf-8
'''compile() 函数将一个字符串编译为字节代码。'''
str1 = "for i in range(0,10): print(i)"
c = compile(str1,'','exec') # 编译为字节代码对象
print c
exec(c)
print '--------------------------------------------'
str2 = "3 * 4 + 5"
a = compile(str2,'','eval')
print eval(a)
运行结果:
complie运行结果测试
eval()、exec()以及complie()使用说明以及注意事项
- eval()
1- eval() 函数用来执行一个字符串表达式,并返回表达式的值。
2- 语法:
eval(expression[, globals[, locals]])
参数:
expression -- 表达式。
globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
返回值:
返回表达式计算结果。
- exec()
1- exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。
需要说明的是在 Python2 中exec不是函数,而是一个内置语句(statement),但是Python 2中有一个 execfile() 函数。可以理解为 Python 3 把 exec 这个 statement 和 execfile() 函数的功能够整合到一个新的 exec() 函数中去了。
2- 语法:
exec obj
参数:
obj -- 要执行的表达式。
返回值:
exec 返回值永远为 None。
- complie()
1- compile() 函数将一个字符串编译为字节代码。
2- 语法:
compile(source, filename, mode[, flags[, dont_inherit]])
参数:
source -- 字符串或者AST(Abstract Syntax Trees)对象。。
vfilename -- 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
mode -- 指定编译代码的种类。可以指定为 exec, eval, single。
flags -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
flags和dont_inherit是用来控制编译源码时的标志
返回值:
返回表达式执行结果。
网友评论