Python学习笔记之eval函数简析
一个最基本的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函数简析相关推荐
- Python学习笔记11:函数修饰符
Python学习笔记11:函数修饰符 Python有很多有趣的特性,其中函数修饰符就是一个. 我们在之前的那个web应用示例中用过如下写法: @web.route('/log') @符号后边的,就是一 ...
- python学习笔记之自定义函数
live long and prosper 自定义函数 def greet_user():"""现实简单的问候语"""print(" ...
- Python学习笔记:返回函数
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记7:函数对象及函数对象作參数
一.lambda函数 比如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数參数为x,y,返回值为x+y.函数对象赋给 ...
- Python学习笔记---理解zip()函数
转载自Python零碎知识(2):强大的zip 一.代码引导 首先看这一段代码: 1 >>> name=('jack','beginman','sony','pcky')2 > ...
- 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: ...
- python学习笔记:插入函数append,extend与insert的使用与区别
python中的几个插入函数: append( )函数 函数功能:append( )函数是在列表末尾添加新的对象. 易错点:使用 append() 函数添加列表时,是添加列表的「引用地址」而不是 ...
- 【Python学习笔记二】函数七十二变
Python定义函数语法: def 函数名(参数):函数体 注意:通常用几个return 返回结果,如果方法体中没有return,默认返回 None:如果要在方法体中返回None,则写为 return ...
- python学习笔记07:函数与lambda表达式深度解析
目录 1 函数基础 1.1 标准函数的定义 1.2 求两个数的最大值的函数示例 1.3 返回多个值--求一个列表的数的和值.平均值 1.4 递归函数 2 函数参数 2.1 位置参数(position ...
最新文章
- 如何增加Eclipse输出控制台的容量?
- eureka同步原理_eureka原理剖析
- Clustering by density peaks and distance
- 仅限iE浏览器导出WORD
- css a标签去掉下划线_CSS -- 三大特性
- 后端:循环遍历的用法介绍
- 单元测试 问题描述_单元测试技巧:创建描述性测试
- php里的抽象类和接口
- offset must be non-negative and no greater than buffer length (0)(tensorflow.keras)
- 酒店管理系统-数据库设计说明书
- centos7安装lnmp
- Codesys学习调试笔记2
- 大数据系统体系架构(含图示)
- centos7 下载百度网盘中文件的方法
- 姜小白的python日记Day4 列表和元组
- 安利安卓模拟器-夜神模拟器
- WMS系统架构设计的演变与选择
- 从Rust到远方:PHP星系
- 台达伺服b3设置_雷赛BAC332E运动控制器控制台达B3伺服电机的使用入门介绍(精)...
- Python代码实现尼姆游戏聪明模式
热门文章
- 【模糊综合评价的运用】——《电子舌技术在食用盐模糊感官评价中的应用》论文笔记(内附MATLAB程序)
- [CGAL] CGAL-5.2.1的安装与编译(Win10+vs2019+CGAL-5.2.1)
- uuuuuuuuuu
- Idea Mac OS 80端口被占用
- 莫烦Python教程之Pandas教程
- 初二因式分解奥数竞赛题_(完整)初中数学竞赛因式分解专题
- 概率论与数理统计学习笔记——第三十五讲——依概率收敛,切比雪夫不等式
- python机械臂坐标变换——实现机械臂末端相对移动
- 如何使得一个div在页面居中显示
- java 压缩jar_Java基础之实现解压和压缩jar、zip、rar等源码分享