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

本文深入探讨了Python中eval和exec函数的区别与应用场景。eval函数用于计算存储在字符串中的有效Python表达式,而exec则用于执行Python代码字符串。文章通过实例讲解了两者在处理字符串转换为代码时的不同之处。

前言
最近在用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 代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值