详解python eval函数的妙用


Posted in Python onNovember 16, 2017

python eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果。

函数定义:

eval(expression, globals=None, locals=None)

将字符串str当成有效的表达式来求值并返回计算结果。globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。

python的全局名字空间存储在一个叫globals()的dict对象中;局部名字空间存储在一个叫locals()的dict对象中。我们可以用print (locals())来查看该函数体内的所有变量名和变量值。

Python版本兼容:

  1. Python2.7
  2. Python3.x

eval()主要作用:

1)在编译语言里要动态地产生代码,基本上是不可能的,但动态语言是可以,意味着软件已经部署到服务器上了,但只要作很少的更改,只好直接修改这部分的代码,就可立即实现变化,不用整个软件重新加载。
2)在machin learning里根据用户使用这个软件频率,以及方式,可动态地修改代码,适应用户的变化。

英文解释:

The arguments are a string and optional globals and locals. If provided, globals must be a dictionary. If provided, locals can be any mapping object.

The expression argument is parsed and evaluated as a Python expression (technically speaking, a condition list) using the globals and locals dictionaries as global and local namespace. If the globals dictionary is present and lacks ‘__builtins__', the current globals are copied into globals before expression is parsed. This means that expression normally has full access to the standard builtins module and restricted environments are propagated. If the locals dictionary is omitted it defaults to the globals dictionary. If both dictionaries are omitted, the expression is executed in the environment where eval() is called. The return value is the result of the evaluated expression. Syntax errors are reported as exceptions. Example:

例子:

a=1
g={'a':20}
eval("a+1",g)

结果:
1

例子2, 测试globals, locals

x = 1
y = 1
num1 = eval("x+y")
print (num1)
def g(): 
 x = 2 
 y = 2 
 num3 = eval("x+y") 
 print (num3)  
 num2 = eval("x+y",globals()) 
 #num2 = eval("x+y",globals(),locals()) 
 print (num2)
  
g()

num1的值是2;num3的值也很好理解,是4;num2的值呢?由于提供了globals()参数,那么首先应当找全局的x和y值,也就是都为1,那么显而易见,num2的值也是2。如果注释掉该句,执行下面一句呢?根据第3)点可知,结果为4

实例展示:

可以把list,tuple,dict和string相互转化。

#################################################
字符串转换成列表
>>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>>type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> type(b)
<type 'list'>
#################################################
字符串转换成字典
>>> a = "{1: 'a', 2: 'b'}"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
{1: 'a', 2: 'b'}
>>> type(b)
<type 'dict'>
#################################################
字符串转换成元组
>>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
>>> type(b)
<type 'tuple'>

安全问题:

因为eval的特型, 很可能被黑客利用,造成安全问题。

怎么避免安全问题?

1、自行写检查函数;

2、使用ast.literal_eval代替

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之开始真正编程
Sep 12 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
Python操作rabbitMQ的示例代码
Mar 19 Python
python 三元运算符使用解析
Sep 16 Python
30秒学会30个超实用Python代码片段【收藏版】
Oct 15 Python
python add_argument()用法解析
Jan 29 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
解决keras使用cov1D函数的输入问题
Jun 29 Python
python 获取字典键值对的实现
Nov 12 Python
Python算法之图的遍历
Nov 16 #Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 #Python
python字典操作实例详解
Nov 16 #Python
python实现报表自动化详解
Nov 16 #Python
TF-IDF算法解析与Python实现方法详解
Nov 16 #Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 #Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 #Python
You might like
让你的PHP同时支持GIF、png、JPEG
2006/10/09 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
Javascript 继承机制的实现
2009/08/12 Javascript
javascript 页面划词搜索JS
2009/09/28 Javascript
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
Javascript浅谈之this
2013/12/17 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
Python中几种操作字符串的方法的介绍
2015/04/09 Python
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
Python基础之文件读取的讲解
2019/02/16 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
python实现AdaBoost算法的示例
2020/10/03 Python
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
初一新生军训方案
2014/05/22 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
2019新员工心得体会
2019/06/25 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python