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)计算字符串中有效的表达式,并返回结果

  1. >>> eval('pow(2,2)')
  2. 4
  3. >>> eval('2 + 2')
  4. 4

(2)将字符串转成相应的对象(如list、tuple、dict和string之间的转换)

  1. >>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
  2. >>> b = eval(a)
  3. >>> b
  4. [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
  5. >>> a = "{1:'xx',2:'yy'}"
  6. >>> c = eval(a)
  7. >>> c
  8. {1: 'xx', 2: 'yy'}
  9. >>> a = "(1,2,3,4)"
  10. >>> d = eval(a)
  11. >>> d
  12. (1, 2, 3, 4)

(3)更改变量值

  1. x = 10
  2. def func():
  3. y = 20
  4. a = eval('x+y')
  5. print "a=", a
  6. b = eval('x+y', {'x': 1, 'y': 2})
  7. print "b=", b
  8. c = eval('x+y', {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
  9. print "c=", c
  10. 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

  1. x = 10
  2. expr = """
  3. z = 30
  4. sum = x+y+z
  5. print (sum)
  6. """
  7. def func():
  8. y = 20
  9. exec (expr)
  10. exec (expr, {'x': 1, 'y': 2})
  11. exec (expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
  12. func()

输出:

60

33

34

针对最后一条结果的输出,为什么z是30不是4,梳理一下执行过程如下:

  1. x=1
  2. y=2
  3. def func():
  4. y=3
  5. z=4
  6. z=30
  7. sum=x+y+z
  8. print(sum)
  9. func()

eval()函数与exec()函数的区别:

eval()函数只能计算单个表达式的值,而exec()函数可以动态运行代码段

eval()函数可以有返回值,而exec()函数返回值永远为None

原文:https://blog.csdn.net/xiaoquantouer/article/details/75049938

python的eval、exec函数使用总结的更多相关文章

  1. python中的exec()函数和eval()函数

    exec()函数 exec函数用于执行存储在字符串中的python语句 >>> exec("x=1") >>> x 但有时候,直接这样执行可能会 ...

  2. python中eval, exec, execfile,和compile [转载]

    eval(str [,globals [,locals ]])函数将字符串str当成有效Python表达式来求值,并返回计算结果. 同样地, exec语句将字符串str当成有效Python代码来执行. ...

  3. python中eval, exec, execfile,和compile

    eval(str [,globals [,locals ]])函数将字符串str当成有效Python表达式来求值,并返回计算结果. 同样地, exec语句将字符串str当成有效Python代码来执行. ...

  4. Java实现类似eval()函数或exec()函数的功能

    一篇参考博客:http://www.cnblogs.com/fangwenyu/archive/2011/10/12/2209051.html 在Python中有一个exec()函数,同样在JavaS ...

  5. Python中eval与exec用法的区别

    Python中eval,exec这两个函数有着相似的输入参数类型和执行功能,因此在用法上经常出现混淆,以至经常用错,程序易抛出错误.下面主要通过这两个函数的语法来阐述区别,并用例子来进一步说明. 首先 ...

  6. python 基础 内置函数

    内置参数 print(all([5,-1,5])) # 非0都是真 true print(all([0,-1,5])) # false print(any([1,0,5])) # 有一个数据为真,就为 ...

  7. Python 执行字符串表达式函数(eval exec execfile)

    eval:计算字符串中的表达式 exec:执行字符串中的语句 execfile:用来执行一个文件 在python 2中exec是语句,在python3中exec变为函数,后面要跟括号.在python3 ...

  8. python的三个函数(eval、exec、complie)和python版RMI

    一.python的三个函数: 1.eval函数: 之前已经讲过了这个函数,该函数也类似于php的eval,例如下边这个例子 eval("os.system('id')") 但是有个 ...

  9. 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 ...

随机推荐

  1. ubuntu16安装mysql图形界面

    之前在windows用sqlyog当做图形界面连接mysql,现在在ubuntu上需要连接测试环境的数据库,需要安装mysql图形界面.安装只需要条命令: sudo apt-get update su ...

  2. 《利用Python进行数据分析》笔记---第6章数据加载、存储与文件格式

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  3. struts2 MVC模式

    在学习struts2之前首先了解一下MVC模式. MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型.视图.控制器.它们各自处理自己的任务.分 ...

  4. 虚拟机lamp环境下,Apache配置虚拟主机

    1.在Apache配置文件中开启虚拟主机功能:即:Include etc//extra/httpd-vhosts.conf把前面的#去掉: 2.在extra目录下找到文件httpd-vhosts.co ...

  5. python笔记-6(import导入、time/datetime/random/os/sys模块)

    一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其它内容待日后有深入理解了再来细说 1.import可以导入的两种不同的内容 1.1 *.py文件结尾的文件 ...

  6. 多边形面积问题(hdoj2036)

    杭电oj2036http://acm.hdu.edu.cn/showproblem.php?pid=2036 计算几何,求多边形的面积 只要记住这个公式: 如果逆时针给出点坐标,值为正, 如果顺时针给 ...

  7. 《DSP using MATLAB》Problem 3.21

    模拟信号经过不同的采样率进行采样后,得到不同的数字角频率,如下: 三种Fs,采样后的信号的谱 重建模拟信号,这里只显示由第1种Fs=0.01采样后序列进行重建,采用zoh.foh和spline三种方法 ...

  8. POI解析excel格式的文件(xls,xlsx)

    先贴出所需的jar包: 1.poi-3.17-beta1.jar 2.poi-ooxml-3.17-beta1.jar 3.poi-ooxml-schemas-3.17-beta1.jar 4.com ...

  9. Linux内核时间

    1. printk打印的时间戳 [ 7236.595796] usb 2-1.1: new high-speed USB device number 15 using ehci-platform st ...

  10. Ubuntu配置操作总结

    一.fstab和mtab的区别 /etc/fstab:是开机自动挂载的配置文件,在开机时起作用.相当于启动linux的时候,自动使用检查分区的fsck命令和挂载分区的mount命令,检查分区和挂载分区 ...