详解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设计模式之代理模式实例
Apr 26 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
Python脚本实现集群检测和管理功能
Mar 06 Python
python 异常处理总结
Oct 18 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
Python实现的文轩网爬虫完整示例
May 16 Python
python基于递归解决背包问题详解
Jul 03 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
如何通过一篇文章了解Python中的生成器
Apr 02 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
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
simplehtmldom Doc api帮助文档
2012/03/26 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
推荐20家国外的脚本下载网站
2011/04/28 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
Python中的下划线详解
2015/06/24 Python
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
python实现媒体播放器功能
2018/02/11 Python
PyQt5 多窗口连接实例
2019/06/19 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
成功的餐厅经营创业计划书
2014/01/15 职场文书
初中数学教学反思
2014/01/16 职场文书
五一劳动节活动记录
2014/03/23 职场文书
质量承诺书范文
2014/03/27 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
清明节寄语2015
2015/03/23 职场文书
给老婆的检讨书(搞笑版)
2015/05/06 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
合作协议书格式范本
2016/03/21 职场文书
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS
python实现简单的三子棋游戏
2022/04/28 Python