python3 中的 eval 函数

 

From:http://blog.csdn.net/zhanh1218/article/details/37562167

Python:eval的妙用和滥用:https://blog.csdn.net/zhanh1218/article/details/37562167
python eval():http://www.cnblogs.com/dadadechengzi/p/6149930.html
Python eval 函数妙用:http://www.cnblogs.com/liu-shuai/p/6098246.html
Python 中 eval 带来的潜在风险:https://blog.csdn.net/u011721501/article/details/47298723
Python之 eval() 函数危险性浅析:https://www.jb51.net/article/51814.htm

 

 

eval() 函数十分强大,官方文档解释是:将字符串 string 对象 转化为有效的表达式参与求值运算返回计算结果
语法上:调用的是:eval(expression,globals=None, locals=None)返回的是计算结果
so,结合 math 当成一个计算器很好用。
可以把 list、tuple、dict 和 string 相互转化

其中:
        expression 是一个参与计算的 python 表达式
        globals 是可选的参数,如果设置属性不为 None 的话,就必须是 dictionary 对象了
        locals 也是一个可选的对象,如果设置属性不为 None 的话,可以是任何 map 对象了

python 是用命名空间来记录变量的轨迹的,命名空间是一个dictionary,键是变量名,值是变量值。

当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:

  • 1)局部名字空间 - 特指当前函数或类的方法。
          如果函数定义了一个局部变量 x, 或一个参数 x,Python 将使用它,然后停止搜索。
  • 2)全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
  • 3)内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。

python 的全局名字空间存储在一个叫 globals() 的 dict 对象 中;局部名字空间存储在一个叫 locals() 的 dict 对象中。
我们可以用 print (locals()) 来查看该函数体内的所有变量名和变量值。

下面简单演示一下 eval()函数的使用:

#!usr/bin/env python
#encoding:utf-8import mathdef eval_test():l='[1,2,3,4,[5,6,7,8,9]]'d="{'a':123,'b':456,'c':789}"t='([1,3,5],[5,6,7,8,9],[123,456,789])'print '--------------------------转化开始--------------------------------'print type(l), type(eval(l))print type(d), type(eval(d))print type(t), type(eval(t))if __name__=="__main__":eval_test()

运行结果为:

--------------------------转化开始--------------------------------
<type 'str'> <type 'list'>
<type 'str'> <type 'dict'>
<type 'str'> <type 'tuple'>
[Finished in 0.2s]

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]: lista = "{1: 'a', 2: 'b'}"
b = eval(a)
b
Out[7]: {1: 'a', 2: 'b'}type(b)
Out[8]: dicta = "([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 函数就是实现list、dict、tuple与 str 之间的转化
str 函数把 list,dict,tuple 转为为 字符串
# 字符串转换成列表
a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
print(type(a))
b = eval(a)
print(b)

# 字符串转换成字典
a = "{1: 'a', 2: 'b'}"
print(type(a))
b = eval(a)
print(type(b))
print(b)

# 字符串转换成元组
a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
print(type(a))
b=eval(a)
print(type(b))
print(b)

上面简单演示的是eval在字符串对象和list、dictinoary、tuple对象之间的转换作用。

不可谓不强大!

BUT!强大的函数有代价。安全性是其最大的缺点。

想一想这种使用环境:需要用户输入一个表达式,并求值。

如果用户恶意输入,例如:__import__('os').system('dir')
那么 eval() 之后,你会发现,当前目录文件都会展现在用户前面。

eval(__import__('os').system('dir'))

 

那么继续输入:open('文件名').read()
代码都给人看了。获取完毕,一条删除命令,文件消失。哭吧!

 

众所周知:

eval()的确是一个很便捷的工具,但是便捷使用不当的同时也会造成严重的安全问题,不少的文章和博客都对eval()的安全性进行了相关的分析,在这里我就不多说了。

怎么避免安全问题?
1、自行写检查函数;
2、使用 ast.literal_eval:自行查看DOCUMENT:https://docs.python.org/2/library/ast.html
3、更多好文:Restricted "safe" eval(Python recipe):http://code.activestate.com/recipes/496746-restricted-safe-/

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html超链接去虾线,挑虾线别只会用牙签了,渔民都是这样做的,1秒处理一个,超方便...

现在大家的生活条件已经越来越好&#xff0c;所以说人们在城市的时候也是越来越注意饮食这一方面了&#xff0c;但其实大家在做饭的时候都喜欢买上一些营养丰富的食材&#xff0c;就像是在最近几年海鲜也是让大家都非常喜欢的。海鲜是我们日常生活中都非常喜欢的一个美食&#…

AI将成科学家“高级定制”工具

来源&#xff1a;科技日报 作者&#xff1a;房琳琳化学家有了新的实验助手——人工智能&#xff08;AI&#xff09;。随着深度学习算法的进一步应用&#xff0c;AI计算机程序能帮助药物化合物等小有机分子产生所需的反应序列&#xff0c;制定合成路径。《自然》杂志近日发表了…

华为式创新与海尔式创新——两条道路考验中国制造

来源&#xff1a;企业管理杂志&#xff08;ID&#xff1a;qyglzz&#xff09;作者&#xff1a;吴兴杰&#xff0c;中国管理科学研究院专家咨询委员会副主任、学术委员会委员、研究员以华为为代表的聚合化创新之路非常难走而又不得不走&#xff0c;否则永远只能当二流甚至三流企…

Python 日期 的 加减 等 操作

datetime — Basic date and time types&#xff1a;https://docs.python.org/3.8/library/datetime.html dateutil --- powerful extensions to datetime&#xff1a;https://dateutil.readthedocs.io/en/stable/index.html Python time 和 datetime 的常用转换处理&#xf…

牛津大学计算机系主任:人工智能立法重在抓机遇、防危害

来源&#xff1a;科技日报 作者&#xff1a;郑焕斌“人工智能立法的重点应在于充分利用AI技术所提供的各种机遇&#xff0c;构建适宜的环境以激励、培育大量AI初创公司和新服务的发展&#xff0c;防范和应对AI技术所带来的各种潜在危害。”牛津大学计算机系主任迈克尔伍尔德里…

关于deepearth的一点小问题

我下载的deepEarth的源代码&#xff0c;编译以后有错误&#xff0c;不知怎么办&#xff0c;不知道各位用没用过deepEarth啊&#xff1f;请高手指教&#xff01; 转载于:https://www.cnblogs.com/kakaleilei/archive/2010/03/09/1681608.html

计算机术语局部性,【计算机基础】程序的局部性简介

什么是局部性&#xff1f;局部性分类局部性有什么作用&#xff1f;局部性举例数据引用的局部性取指令的局部性结论完整代码什么是局部性&#xff1f;程序倾向于使用它们最近使用的地址接近或相等的数据和指令。局部性分类局部性主要分为时间局部性和空间局部性。时间局部性&…

卫星还在“织网” 北斗时代尚需时日

来源&#xff1a;科技日报 作者&#xff1a;付丽丽生活在大都市里的人们&#xff0c;出门如果没有手机导航&#xff0c;会感觉自己像盲人一样不会走路。而让人更无法忍受的&#xff0c;则是傻导航的瞎导乱导&#xff0c;“我就老跟导航吵架&#xff0c;气得我把手机摔了的心都…

Python3.5 queue 模块详解 和 进程间通讯

queue — A synchronized queue class&#xff1a;https://docs.python.org/3/library/queue.html 菜鸟教程 - Python3 多线程&#xff1a;http://www.runoob.com/python3/python3-multithreading.html python3 队列&#xff1a;https://cloud.tencent.com/developer/informa…

5大洲,32个国家:剑桥分析公司的触角到底有多远?

来源&#xff1a; 资本实验室 作者&#xff1a;王进据Facebook最新披露的信息&#xff0c;剑桥分析公司&#xff08;Cambridge Analytica&#xff09;经由Facebook平台泄露数据影响的用户数量从5000万增加到8700万。其中&#xff0c;美国占比81.6&#xff05;&#xff0c;也就…

计算机房的分类,雅思词汇分类积累之计算机房

雅思词汇在雅思考试中占据着很重要的位置&#xff0c;是各部分考试的基础&#xff0c;今天新东方在线小编给大家整理了雅思词汇分类积累之计算机房&#xff0c;希望能够帮助大家顺利的通过考试&#xff0c;一起来看看吧!硬件mainframe主机,monitor监视器&#xff0c;显示器,scr…

CSRF攻击与防御(写得非常好)

From&#xff1a;https://www.daguanren.cc/post/csrf-introduction.html From&#xff1a;https://blog.csdn.net/stpeace/article/details/53512283 CSRF 攻击的应对之道&#xff1a;https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf WEB三大攻击之—CSRF攻击与…

使用AvalonDock制作WPF多标签浏览器(一)

AvalonDock是CodePlex上的一个开源项目&#xff0c;利用它可以很容易的做出类似于VS的UI效果。下图是AvalonDock源码中自带的一个Demo&#xff1a;我们可以用这款第三方控件为基础来制作多标签浏览器。下面是最终效果图&#xff1a;甚至可以把其中一个标签拖出主窗体成为一个独…

量子计算机不会“秒杀”经典计算机

来源&#xff1a;《中国科学报》 作者&#xff1a;陈昭昀许多人在介绍量子计算机的时候&#xff0c;都喜欢用到“秒杀”这个词。比如&#xff1a;量子计算机将“秒杀”现有密码体系、量子计算机将“秒杀”经典计算机&#xff0c;甚至将量子计算机比作无所不能的“千手观音”&a…

WEB三大攻击之—SQL注入攻击与防护

From&#xff1a;https://www.daguanren.cc/post/sql-injection.html SQL注入的定义与诱因 定义 SQL攻击&#xff08;英语&#xff1a;SQL injection&#xff09;&#xff0c;简称注入攻击&#xff0c;是发生于应用程序之数据库层的安全漏洞。简而言之&#xff0c;是在输入的…

Yoshua Bengio团队通过在网络「隐藏空间」中使用降噪器以提高深度神经网络的「鲁棒性」...

原文来源&#xff1a;arXiv 作者&#xff1a;Alex Lamb、Jonathan Binas、Anirudh Goyal、Dmitriy Serdyuk、Sandeep Subramanian、Ioannis Mitliagkas、Yoshua Bengio「雷克世界」编译&#xff1a;嗯~是阿童木呀、KABUDA、EVA导语&#xff1a;深度神经网络在各种各样的重要任…

在视图中显示InActive记录

最近很多朋友(Andrew、BENEN1)都在问如何让Lookup显示InActive记录,研究后发现可以通过Plugin来实现这样的功能&#xff0c;MSCRM真是无所不能&#xff0c;没有做不到&#xff0c;只有想不到!实现步骤&#xff1a;一、自定义实体->工程项目->表单和视图->查找视图->…

计算机网申兴趣爱好怎么写,网申简历中的特长爱好到底怎么写

原标题:网申简历中的特长爱好到底怎么写&#xff1f;2017年安徽农商银行招聘920人报名已经进行了几天了.在报名的过程中,有很多小伙伴不知道网申时的特长爱好怎么写.那么,不论是在网申还是在求职过程中的简历特长爱好到底要怎么写呢&#xff1f;加备考群 免费领资料 626394893下…

OpenAI 发布通用人工智能研究纲领:以全人类的名义承诺

作者&#xff1a;杨晓凡近期 Facebook 泄露用户数据、针对性影响用户、Uber 无人车事故&#xff0c;以及全球学者联名抵制韩国开发自主武器的事情再次敲响了人工智能安全的警钟。OpenAI 也于昨日发表了一份自己的研究纲领&#xff0c; 表明了自己的科研使命和行动法则&#xff…

基于深度学习的性别识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 GoogLeNet网络结构 4.2. 基于GoogLeNet的性别识别算法 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..............................…