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)bOut[3]:[[1,2],[3,4],[5,6],[7,8],[9,0]]type(b)Out[4]:lista="{1:'a',2:'b'}"b=eval(a)bOut[7]:{1:'a',2:'b'}type(b)Out[8]:dicta="([1,2],[3,4],[5,6],[7,8],(9,0))"b=eval(a)bOut[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,一方面享受他的了灵活性同时,也要注意安全性。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注本站行业资讯频道,感谢您对本站的支持。
本文由 贵州做网站公司 整理发布,部分图文来源于网络,如有侵权,请联系我们删除,谢谢!
微信公众号代运营在我们的生活中很常见,因为现在的企业都想用比较便宜的价格做好一方面的运营,微信公众号运营如果自己组建团队,需要支付比代运营团队更高的价格,还不一...
如今外卖行业成为了一种很便捷的服务,随着美团、饿了么、滴滴平台的崛起,越来越多的人选择足不出户就能在家点餐。那么外卖小程序开发有哪些价值?一、外卖小程序的价值1...
时代在发展,微信小程序从发布了“跳一跳”开始,微信小程序游戏就已经在朋友圈中“传疯”了,在如今这个社会上,游戏市场从以前的对对碰,到现在的绝地求生,游戏世界...
咖啡是一种非常受欢迎的饮料。对于咖啡爱好者来说,咖啡不仅能带来味蕾的享受,在下午爱打瞌睡的时候来一杯咖啡,还能提神醒脑。相比奶茶等街头饮品,很多人对咖啡的印象似乎更友好一些,认为咖啡很好喝,提神,不容易让人发胖。其实并不是这样的。咖啡店里经常可以看到以下六种咖啡。很多朋友点咖啡的时候,往往都在必点清单上。但是,很多人喝了之后,发现自己胖了很多。接下来我就给大家说说这几款不推荐减肥的咖啡,看看你经常...
2021年油价上涨明显,全球油价上涨原因是什么?国际油价在经历了2020年上半年的大跌之后,下半年开始进入上行通道,期间虽然有僵持整理以及适度回调,但整体走势稳健向好,尤其是2021年四季度继续登高,欧美油价10月下旬的年内高点86.4、84.65美元/桶,不仅收复了2020年的价格跌幅,也是刷新了自2014年10月之后的七年价格新高。机构认为:2021年国际油价整体震荡上涨,价格重心稳步上移,但...
ABS融资是什么意思?abs融资它是由各企业的贷款协议或者应收账款作为担保基础发行进行融资的一种方式,简单来说就是把缺乏流动性、但具有可预期收入的资产,通过在资本市场上发行证券的方式出售以获取资金,提高资产的流动性。abs融资是通过在国际市场发行债券筹集资金的,债券利率一般相对较低,降低了企业筹资成本。abs是直接融资还是间接融资?ABS是指将资产通过资本市场上发行证券的方式出售,以获取融资,是一...