python的eval、exec函数使用总结
eval函数
一、函数的作用
将字符串str当成有效的表达式来求值并返回计算结果。它要执行的python代码只能是单个运算表达式(不支持任意形式的赋值操作),而不能是复杂的代码逻辑。
二、函数的定义
eval(expression, globals=None, locals=None)
参数说明:
expression:必选参数,可以是字符串,也可以是一个任意的code对象实例(可以通过compile函数创建)。如果它是一个字符串,它会被当作一个python表达式进行分析和解释。
globals:可选参数,表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。
locals:可选参数,表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与globals相同的值。
如果globals与locals都被忽略,那么它们将取eval()函数被调用环境下的全局命名空间和局部命名空间。
返回值:
如果expression是一个code对象,且创建该code对象时,compile函数的mode参数是’exec’,那么eval()函数的返回值是None
否则,如果expression是一个输出语句,如print(),则eval()返回结果为None
否则,expression表达式的结果就是eval()函数的返回值
三、举几个栗子
(1)计算字符串中有效的表达式,并返回结果
- >>> eval('pow(2,2)')
- 4
- >>> eval('2 + 2')
- 4
(2)将字符串转成相应的对象(如list、tuple、dict和string之间的转换)
- >>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
- >>> b = eval(a)
- >>> b
- [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
- >>> a = "{1:'xx',2:'yy'}"
- >>> c = eval(a)
- >>> c
- {1: 'xx', 2: 'yy'}
- >>> a = "(1,2,3,4)"
- >>> d = eval(a)
- >>> d
- (1, 2, 3, 4)
(3)更改变量值
- x = 10
- def func():
- y = 20
- a = eval('x+y')
- print "a=", a
- b = eval('x+y', {'x': 1, 'y': 2})
- print "b=", b
- c = eval('x+y', {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
- print "c=", c
- func()
输出:
a= 30
b= 3
c= 4
exec函数
一、函数的作用
动态执行python代码,可以执行复杂的python代码
二、函数定义
exec(object[, globals[, locals]]]
参数说明:
object:必选参数,表示需要被指定的python代码,它必须是字符串或code对象。如果object是一个字符串,该字符串会被先解析为一组python语句,然后再执行。如果object是一个code对象,那么它只是被简单的执行
globals:可选参数,同eval函数
locals:可选参数,同eval函数
返回值:
exec函数的返回值永远为None
三、栗子
(1)实例1
因为exec返回值是None
所以 a = exec(‘x+y’),这条代码会报错。
改为exec(‘x+y’),可以正常执行
而d = eval(‘print(x,y)’),这条代码会报错
改为d = exec(‘print(x,y)’),可以正常执行
(2)实例2
- x = 10
- expr = """
- z = 30
- sum = x+y+z
- print (sum)
- """
- def func():
- y = 20
- exec (expr)
- exec (expr, {'x': 1, 'y': 2})
- exec (expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
- func()
输出:
60
33
34
针对最后一条结果的输出,为什么z是30不是4,梳理一下执行过程如下:
- x=1
- y=2
- def func():
- y=3
- z=4
- z=30
- sum=x+y+z
- print(sum)
- func()
eval()函数与exec()函数的区别:
eval()函数只能计算单个表达式的值,而exec()函数可以动态运行代码段
eval()函数可以有返回值,而exec()函数返回值永远为None
原文:https://blog.csdn.net/xiaoquantouer/article/details/75049938
python的eval、exec函数使用总结的更多相关文章
- python中的exec()函数和eval()函数
exec()函数 exec函数用于执行存储在字符串中的python语句 >>> exec("x=1") >>> x 但有时候,直接这样执行可能会 ...
- python中eval, exec, execfile,和compile [转载]
eval(str [,globals [,locals ]])函数将字符串str当成有效Python表达式来求值,并返回计算结果. 同样地, exec语句将字符串str当成有效Python代码来执行. ...
- python中eval, exec, execfile,和compile
eval(str [,globals [,locals ]])函数将字符串str当成有效Python表达式来求值,并返回计算结果. 同样地, exec语句将字符串str当成有效Python代码来执行. ...
- Java实现类似eval()函数或exec()函数的功能
一篇参考博客:http://www.cnblogs.com/fangwenyu/archive/2011/10/12/2209051.html 在Python中有一个exec()函数,同样在JavaS ...
- Python中eval与exec用法的区别
Python中eval,exec这两个函数有着相似的输入参数类型和执行功能,因此在用法上经常出现混淆,以至经常用错,程序易抛出错误.下面主要通过这两个函数的语法来阐述区别,并用例子来进一步说明. 首先 ...
- python 基础 内置函数
内置参数 print(all([5,-1,5])) # 非0都是真 true print(all([0,-1,5])) # false print(any([1,0,5])) # 有一个数据为真,就为 ...
- Python 执行字符串表达式函数(eval exec execfile)
eval:计算字符串中的表达式 exec:执行字符串中的语句 execfile:用来执行一个文件 在python 2中exec是语句,在python3中exec变为函数,后面要跟括号.在python3 ...
- python的三个函数(eval、exec、complie)和python版RMI
一.python的三个函数: 1.eval函数: 之前已经讲过了这个函数,该函数也类似于php的eval,例如下边这个例子 eval("os.system('id')") 但是有个 ...
- Python有用的内置函数divmod,id,sorted,enumerate,input,oct,eval,exec,isinstance,ord,chr,filter,vars,zip
divmod(a, b) 函数接收两个数字类型(非复数)参数,返回一个包含商和余数的元组(a // b, a % b) id() 函数用于获取对象的内存地址. sorted(iterable, key ...
随机推荐
- A+B for Input-Output Practice (VIII)
A+B for Input-Output Practice (VIII) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...
- Java IO流经典练习题
一.练习的题目 (一) 在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,在创建一个目录IOTest,之后将HelloWorld.txt移动到IOTest目录下去:之后 ...
- C++ 多线程中使用cout还是printf
在多线程的设计模式下,如果多个线程都使用cout打印信息,那么很容易出现内容交替的现象,例如下图: 代码如下: 如果把cout替换成printf,那么就不会出现这个问题,运行结果如下图: 对应代码如下 ...
- iOS-----推送机制(下)
推 送 机 制(下) 单击”从证书颁发机构请求证书”后,将会显示下图所示的对话框 输入电子邮件地址和常用名称,并选中“存储到磁盘”单选钮,然后单击“继续”按钮,该程序将会创建一个“Certificat ...
- CodeForces - 140E:New Year Garland (组合数&&DP)
As Gerald, Alexander, Sergey and Gennady are already busy with the usual New Year chores, Edward has ...
- ZOJ2402 Lenny's Lucky Lotto List 简单DP
Lenny's Lucky Lotto Lists Time Limit: 2 Seconds Memory Limit:65536 KB Lenny likes to play the g ...
- hdu 5182 结构体排序
BC # 32 : 打 BC 的时候没看全三个关键字,WA 了五发,花了近一小时,问了一下才发现少看一个条件,于是顺利给跪. 题意:给出若干城市的两次空气质量,首先按空气质量差排序,若相等则按第二次排 ...
- java开发中的常见类和对象-建议阅读时间3分钟
1.Dao 数据访问对象 此对象用于访问数据库.实现类一般用于用于操作数据库! 一般操作修改,添加,删除数据库操作的步骤很相似,就写了一个公共类DAO类 ,修改,添加,删除数据库操作时 直接调用公共类 ...
- 百度,谷歌,360,搜狗,神马等蜘蛛IP段
https://www.imydl.com/wzjs/5971.html 记得3月份的时候明月分享过一篇[站长必备:百度.谷歌.搜狗.360等蜘蛛常见IP地址]的文章,好像一直都受到了众多站长们的关注 ...
- php中二维数组排序问题方法详解
PHP中二维数组排序,可以使用PHP内置函数uasort() 示例一: 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 回调函数如下:注意回调函数的返回值是负数或者是false的时候,表示 ...