python中eval函数和exec函数的区别与联系

前言
最近在用python写一个小工具,有一个场景是需要将用户手动输入的字符串转成代码,一开始不知道python中有内置函数可以直接完成这件事,倒腾了很久,后面还是靠度娘找到了eval函数,部分解决了我的问题,期间遇到困难,又发现了exec函数,因此稍微研究了下两者的区别和用途。

一、eval函数
首先,eval函数和exec函数都用将字符串转成代码并执行。
eval函数使用方法如下:
eval(expression, globals=none, locals=none)

expression:是一个字符串;

globals :全局命名空间,必须是一个字典对象;

locals:局部命名空间,如果被提供,可以是任何映射对象;
举例:

1、a =1

 print(eval('a+7'))         

 结果直接计算为8

2、globals 指定的情况下:

 a=7

 g = {‘a’:9}

  re = eval('a+5',g)   

  结果为14

3、locals,globals 都被指定:

 a=7

 g = {‘a’:9}

 l = {"a":12}

  re = eval('a+5',g,l)   

  结果为17,因为local定义的局部变量,globle定义的全局变量,局部变量会覆盖全局变量;

4、eval可以将字符串转化成相应的数据结构:

如:a = ‘[1,2,3]’

  eval(a) 可以将a转化成列表,字典列表等结构都适用此方法

二、exec函数
exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。
语法

以下是 exec 的语法:

exec obj

参数

obj -- 要执行的表达式。

返回值

exec 返回值永远为 None。

实例


>>>exec 'print "Hello World"'
Hello World
# 单行语句字符串
>>> exec "print 'runoob.com'"
runoob.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

三、两者的区别
1、eval() 函数返回表达式的值,exec 返回值永远为 None
2、eval() 函数不能执行赋值语句,比如eval(“a=1”)就会报错,用exec可以。
3、exec()函数可以执行存储在文件中的python语句,相比于 eval,exec可以执行更复杂的 Python 代码。

你可能感兴趣的:(python,字符串,编程语言)