详解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中将字典转换成其json字符串
Jul 16 Python
Python smallseg分词用法实例分析
May 28 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
Python构建XML树结构的方法示例
Jun 30 Python
Django添加sitemap的方法示例
Aug 06 Python
Python----数据预处理代码实例
Mar 20 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 Python
Python numpy线性代数用法实例解析
Nov 15 Python
用python写爬虫简单吗
Jul 28 Python
pandas针对excel处理的实现
Jan 15 Python
Python面向对象之内置函数相关知识总结
Jun 24 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设计模式 Template (模板模式)
2011/06/26 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
python del()函数用法
2013/03/24 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
python在文本开头插入一行的实例
2018/05/02 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python中常用的内置方法
2019/01/28 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
导师评语大全
2014/04/26 职场文书
花坛标语大全
2014/06/30 职场文书
快递员岗位职责
2014/09/12 职场文书
档案管理员岗位职责
2015/02/12 职场文书
2015年国庆节慰问信
2015/03/23 职场文书
撤诉书怎么写
2015/05/19 职场文书
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
Python序列化模块JSON与Pickle
2022/06/05 Python