详解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实现计算资源图标crc值的方法
Oct 05 Python
使用python实现省市三级菜单效果
Jan 20 Python
Django卸载之后重新安装的方法
Mar 15 Python
python绘制双柱形图代码实例
Dec 14 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
Python跳出多重循环的方法示例
Jul 03 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
Python对象的属性访问过程详解
Mar 05 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
Mar 06 Python
pycharm导入源码的具体步骤
Aug 04 Python
Python Selenium XPath根据文本内容查找元素的方法
Dec 07 Python
Python爬取某平台短视频的方法
Feb 08 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文件大小格式化函数合集
2014/03/10 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
不懂JavaScript应该怎样学
2008/04/16 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
vue.js实现备忘录功能的方法
2017/07/10 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
2019/06/17 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
python编程开发之类型转换convert实例分析
2015/11/13 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
Python如何使用input函数获取输入
2020/08/06 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
高中军训感言800字
2014/03/05 职场文书
主办会计岗位职责
2014/03/13 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
关于童年的读书笔记
2015/06/26 职场文书
《花钟》教学反思
2016/02/17 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书