一个最基本的eval()函数的格式应该如下:

>>> command = 'print(\'Hello world!\')'
>>> eval(command)
Hello world!

没错,eval函数是一个可以让字符串转换为表达式的内置函数(注意eval()不支持任何形式的赋值操作,而不能是复杂的代码逻辑)。
eval()函数不仅可以执行代码,还可以作如下操作:

>>> eval('[1, 2, 3]') #字符串转列表
[1, 2, 3]
>>> eval('(1, 2, 3)') #字符串转元组
(1, 2, 3)
>>> eval('{"one": 1, "two": 2, "three": 3}') #字符串转字典
{'one': 1, 'two': 2, 'three': 3}

eval()函数的完整格式如下:

eval(expression[, globals[, locals]])

expression: 表达式。
globals: 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals: 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

当后两个参数都为空时,很好理解,就是一个string类型的算术表达式,计算出结果即可。等价于eval(expression)。
当locals参数为空,globals参数不为空时,先查找globals参数中是否存在变量,并计算。
当两个参数都不为空时,先查找locals参数,再查找globals参数。
无良引用一段Python官方的文档:

eval(expression[, globals[, locals]])
实参是一个字符串,以及可选的 globals 和 locals。globals 实参必须是一个字典。locals 可以是任何映射对象。
expression 参数会作为一个 Python 表达式(从技术上说是一个条件列表)被解析并求值,并使用globals 和 locals 字典作为全局和局部命名空间。 如果 globals 字典存在且不包含以 __builtins__为键的值,则会在解析 expression 之前插入以此为键的对内置模块 builtins 的引用。 这意味着 expression 通常具有对标准 builtins 模块的完全访问权限且受限的环境会被传播。 如果省略 locals 字典则其默认值为 globals 字典。 如果两个字典同时省略,则表达式执行时会使用 eval() 被调用的环境中的 globals 和 locals。 请注意,eval() 并没有对外围环境下的 (非局部)嵌套作用域 的访问权限。
返回值就是表达式的求值结果。 语法错误将作为异常被报告。 例如:
>>> x = 1
>>> eval(‘x+1’)
2
这个函数也可以用来执行任何代码对象(如compile()创建的)。这种情况下,参数是代码对象,而不是字符串。如果编译该对象时的 mode 实参是'exec' 那么 eval() 返回值为 None
提示: exec() 函数支持动态执行语句。 globals() 和 locals() 函数各自返回当前的全局和本地字典,因此您可以将它们传递给 eval() 或 exec() 来使用。


实战:

传递全局变量

>>> print(eval("{'name':'linux','age':age}",{"age":1822}))
{'name': 'linux', 'age': 1822}

传递本地变量

>>> age=18
>>> print(eval("{'name':'linux','age':age}",{"age":1822},locals()))
{'name': 'linux', 'age': 18}

Python学习笔记之eval函数简析相关推荐

  1. Python学习笔记11:函数修饰符

    Python学习笔记11:函数修饰符 Python有很多有趣的特性,其中函数修饰符就是一个. 我们在之前的那个web应用示例中用过如下写法: @web.route('/log') @符号后边的,就是一 ...

  2. python学习笔记之自定义函数

    live long and prosper 自定义函数 def greet_user():"""现实简单的问候语"""print(" ...

  3. Python学习笔记:返回函数

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. Python学习笔记7:函数对象及函数对象作參数

    一.lambda函数 比如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数參数为x,y,返回值为x+y.函数对象赋给 ...

  5. Python学习笔记---理解zip()函数

    转载自Python零碎知识(2):强大的zip 一.代码引导 首先看这一段代码: 1 >>> name=('jack','beginman','sony','pcky')2 > ...

  6. python学习笔记10-匿名函数lambda

    匿名函数lambda 定义匿名函数 lambda def fun(x,y): return x*y r=lambda x,y: x*y r(3,4) In [2]: r = lambda x, y: ...

  7. python学习笔记:插入函数append,extend与insert的使用与区别

    python中的几个插入函数: append( )函数    函数功能:append( )函数是在列表末尾添加新的对象. 易错点:使用 append() 函数添加列表时,是添加列表的「引用地址」而不是 ...

  8. 【Python学习笔记二】函数七十二变

    Python定义函数语法: def 函数名(参数):函数体 注意:通常用几个return 返回结果,如果方法体中没有return,默认返回 None:如果要在方法体中返回None,则写为 return ...

  9. python学习笔记07:函数与lambda表达式深度解析

    目录 1 函数基础 1.1 标准函数的定义 1.2  求两个数的最大值的函数示例 1.3 返回多个值--求一个列表的数的和值.平均值 1.4 递归函数 2 函数参数 2.1 位置参数(position ...

最新文章

  1. 如何增加Eclipse输出控制台的容量?
  2. eureka同步原理_eureka原理剖析
  3. Clustering by density peaks and distance
  4. 仅限iE浏览器导出WORD
  5. css a标签去掉下划线_CSS -- 三大特性
  6. 后端:循环遍历的用法介绍
  7. 单元测试 问题描述_单元测试技巧:创建描述性测试
  8. php里的抽象类和接口
  9. offset must be non-negative and no greater than buffer length (0)(tensorflow.keras)
  10. 酒店管理系统-数据库设计说明书
  11. centos7安装lnmp
  12. Codesys学习调试笔记2
  13. 大数据系统体系架构(含图示)
  14. centos7 下载百度网盘中文件的方法
  15. 姜小白的python日记Day4 列表和元组
  16. 安利安卓模拟器-夜神模拟器
  17. WMS系统架构设计的演变与选择
  18. 从Rust到远方:PHP星系
  19. 台达伺服b3设置_雷赛BAC332E运动控制器控制台达B3伺服电机的使用入门介绍(精)...
  20. Python代码实现尼姆游戏聪明模式

热门文章

  1. 【模糊综合评价的运用】——《电子舌技术在食用盐模糊感官评价中的应用》论文笔记(内附MATLAB程序)
  2. [CGAL] CGAL-5.2.1的安装与编译(Win10+vs2019+CGAL-5.2.1)
  3. uuuuuuuuuu
  4. Idea Mac OS 80端口被占用
  5. 莫烦Python教程之Pandas教程
  6. 初二因式分解奥数竞赛题_(完整)初中数学竞赛因式分解专题
  7. 概率论与数理统计学习笔记——第三十五讲——依概率收敛,切比雪夫不等式
  8. python机械臂坐标变换——实现机械臂末端相对移动
  9. 如何使得一个div在页面居中显示
  10. java 压缩jar_Java基础之实现解压和压缩jar、zip、rar等源码分享