python eval和exec的区别是什么

1、eval函数
函数的作用:
计算指定表达式的值。也就是说,它要执行的Python代码只能是单个操作表达式(请注意,eval不支持任何形式的赋值操作),而不是复杂的代码逻辑,类似于lambda表达式。
函数定义:
eval(expression,globals=None,locals=None)
参数说明:
expression:必选参数,可以是字符串,也可以是任何code对象的例子(可以通过compile函数创建)。如果是字符串,将作为Python表达式进行分析和解释(使用globals和locals参数作为全局和本地命名空间)。
globals:可选参数表示全球命名空间(存储全球变量),如果提供,则必须是字典对象。
locals:可选参数表示当前局部命名空间(存储局部变量),如果提供,可以是任何映射对象。如果忽略了这个参数,它将获得与globals相同的值。
假如globals和locals都被忽略了,那么它们就会将eval()函数调用到环境中的整体命名空间和局部命名空间。
返回值:
如果expression是code对象,并且在创建code对象时,compile函数的mode参数为'exec',那么eval()函数的返回值是None;
否则,如果expression是输出语句,如print(),则eval()返回结果为none;
否则,expression表达式的结果是eval()函数的返回值;
2、exec函数
函数的作用:
动态执行Python代码。也就是说,exec可以执行复杂的Python代码,而不是像eval函数那样只计算一个表达值。
函数定义:
exec(object[,globals[,locals]])
参数说明:
object:必选参数表示需要指定的Python代码。它必须是字符串或code对象。如果object是字符串,字符串将首先分析为一组Python语句,然后执行(除非语法错误)。如果object是code对象,那么它只是简单地执行。
globals:与eval函数相同的可选参数
locals:与eval函数相同的可选参数
返回值:
exec函数的返回值永远是None.
需要注意的是Python exec不是函数,而是内置语句(statement),但是Python 2中有一个execfile()函数。可以理解为Python statement和execfile()函数的三个exec功能可以集成到新的exec()函数中。
Eval()函数和exec函数之间的差异
eval()函数只能计算单个表达值,而exec()函数可以动态运行代码段。
eval()函数可以有返回值,而exec()函数返回值总是None。
eval:
字符串中的字符可以转换为可执行代码,但只支持一行字符。可返回执行后获得的值。如下:
f="3+6+9+8" s=eval(f) print(s)
输出:
"C:\ProgramFilespython3\python3.exe"D:/codes_py3/luhy_tool/string_utils/mymethod.py 26
exec:
可以将字符串中的字符转换为可执行代码,可以支持多行字符。但无法获得返回结果。如下所示:
code='''
deffunc():
print('test')
return5555
func()
'''
f=exec(code)
print('---'*5)
print(f)输出:
"C:\ProgramFilespython3python3.exe"D:/codes_py3/luhy_tool/string_utils/mymethod.py test --------------- None
python培训视频众多,全部在python学习网,欢迎在线学习!
