详解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将xml xsl文件生成html文件存储示例讲解
Dec 03 Python
Python操作csv文件实例详解
Jul 31 Python
python版学生管理系统
Jan 10 Python
python在每个字符后添加空格的实例
May 07 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
详解python里的命名规范
Jul 16 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
python字典的setdefault的巧妙用法
Aug 07 Python
python银行系统实现源码
Oct 25 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
Python 基于jwt实现认证机制流程解析
Jun 22 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
Nov 28 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
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
Python字符遍历的艺术
2008/09/06 Python
python下载图片实现方法(超简单)
2017/07/21 Python
Python 监测文件是否更新的方法
2019/06/10 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
美国校园市场:OCM
2017/06/08 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
外贸主管求职简历的自我评价
2013/10/23 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
党员活动总结
2015/02/04 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书