PYTHON EVAL的用法及注意事项解析


Posted in Python onSeptember 06, 2019

前言

eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。想象一下变量赋值时,将等号右边的表达式写成字符串的格式,将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果。

python中eval函数的用法十分的灵活,但也十分危险,安全性是其最大的缺点。本文从灵活性和危险性两方面介绍eval。

1、强大之处

举几个例子感受一下,字符串与list、tuple、dict的转化。

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
b = eval(a)
b
Out[3]: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
type(b)
Out[4]: list
a = "{1: 'a', 2: 'b'}"
b = eval(a)
b
Out[7]: {1: 'a', 2: 'b'}
type(b)
Out[8]: dict
a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
b = eval(a)
b
Out[11]: ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0)) 

eval的语法格式如下:

eval(expression[, globals[, locals]])

强大吧,给个字符串给eval,eval给你一个表达式返回值。

globals : 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。expression : 字符串

locals : 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

结合globals和locals看看几个例子

传递globals参数值为{“age”:1822},

eval("{'name':'linux','age':age}",{"age":1822})

输出结果

eval("{'name':'linux','age':age}",{"age":1822}) 

再加上locals变量

eval("{'name':'linux','age':age}",{"age":1822},locals())

当两个参数都不为空时,先查找locals参数,再查找globals参数,locals参数中同名变量会覆盖globals中的变量。根据上面两个例子可以看到当locals参数为空,globals参数不为空时,查找globals参数中是否存在变量,并计算。

2、危险之处

eval虽然方便,但是要注意安全性,可以将字符串转成表达式并执行,就可以利用执行系统命令,删除文件等操作。

假设用户恶意输入。比如:

eval("__import__('os').system('ls /home/pythontab.com/www/')") 

那么eval()之后,你会发现,当前文件夹文件都会展如今用户前面。这句其实相当于执行了

os.system('ls /home/pythontab.com/www/')

那么继续输入:

eval("__import__('os').system('cat /home/pythontab.com/www/test.sql')")

代码都给人看了。

再来一条删除命令,文件消失。比如

eval("__import__('os').system('rm /home/pythontab.com/www/test.data')")

所以使用eval,一方面享受他的了灵活性同时,也要注意安全性。

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

Python 相关文章推荐
Python程序员开发中常犯的10个错误
Jul 07 Python
python对字典进行排序实例
Sep 25 Python
Python入门篇之对象类型
Oct 17 Python
Python中利用原始套接字进行网络编程的示例
May 04 Python
Perl中著名的Schwartzian转换问题解决实现
Jun 02 Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 Python
浅谈Python的文件类型
May 30 Python
Python编写一个闹钟功能
Jul 11 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
Python实现语音识别和语音合成功能
Sep 20 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
Python实现微信机器人的方法
Sep 06 #Python
Linux下通过python获取本机ip方法示例
Sep 06 #Python
django-crontab 定时执行任务方法的实现
Sep 06 #Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 #Python
python自动发微信监控报警
Sep 06 #Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 #Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 #Python
You might like
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
有关php运算符的知识大全
2011/11/03 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
js 居中漂浮广告
2010/03/21 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
浅析return false的正确使用
2013/11/04 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
html5.2 dialog简介详解
2018/02/27 HTML / CSS
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
Python里面如何拷贝一个对象
2014/02/17 面试题
工程现场管理求职自荐信
2013/10/02 职场文书
公司年会开场白
2015/06/01 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL
Vue router配置与使用分析讲解
2022/12/24 Vue.js