本篇文章为大家展示了Python中eval的使用方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。想象一下变量赋值时,将等号右边的表达式写成字符串的格式,将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果。
Python中eval函数的用法十分的灵活,但也十分危险、安全性是其最大的缺点。本文从灵活性和危险性两方面介绍eval。
<强> 1,强大之处强>
举几个例子感受一下,字符串与列表、元组、dict的转化。
a =,“[[1, 2], [3,4], (5、6), (7、8), [9,0]]“; 时间=b eval () b 出[3]:[[1,2],[3,4],[5,6],[7,8],[9,,0]] (b)型 [4]:列表 时间=a “{1:, & # 39;一个# 39;,,2:,& # 39;b # 39;}, 时间=b eval () b 出[7]:{1:,& # 39;一个# 39;,,2:,& # 39;b # 39;} (b)型 [8]:dict类型 a =,“([1, 2], [3,4], (5、6), (7、8), (9,0)), 时间=b eval () b [11]:,([1,2],[3,4],[5,6],[7,8],(9,0))
强大吧,给个字符串给eval, eval给你一个表达式返回值。
eval的语法格式如下:
eval(表达式[,全局[,当地人]])
表达式:字符串
全局:变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
当地人:变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
结合全局和当地人看看几个例子
传递全局参数值为{“年龄”:1822},
eval(“{& # 39;名字# 39;:& # 39;linux # 39;, & # 39;年龄# 39;:年龄},,{“age": 1822})
输出结果
{的名字# 39;:linux # 39;,,年龄# 39;:1822}
再加上当地人变量
=18岁 eval(“{& # 39;名字# 39;:& # 39;linux # 39;, & # 39;年龄# 39;:年龄},,{“age": 1822},当地人())
根据上面两个例子可以看到当当地人参数为空,全局参数不为空时,查找全局参数中是否存在变量,并计算。
当两个参数都不为空时,先查找当地人参数,再查找全局参数,当地人参数中同名变量会覆盖全局中的变量。
<强> 2,危险之处强>
eval虽然方便,但是要注意安全性,可以将字符串转成表达式并执行,就可以利用执行系统命令,删除文件等操作。
假设用户恶意输入。比如:
eval (“__import__(& # 39;操作系统# 39;)系统(& # 39;ls /home/pythontab.com/www/& # 39;)“)
那么eval()之后,你会发现,当前文件夹文件都会展如今用户前面。这句其实相当于执行了
os.system (& # 39; ls /home/pythontab.com/www/& # 39;)
那么继续输入:
eval (“__import__(& # 39;操作系统# 39;)系统(& # 39;cat /home/pythontab.com/www/test.sql& # 39;)“)
代码都给人看了。
再来一条删除命令,文件消失。比如
eval (“__import__(& # 39;操作系统# 39;)系统(& # 39;rm /home/pythontab.com/www/test.data& # 39;)“)
所以使用eval,一方面享受他的了灵活性同时,也要注意安全性。
上述内容就是Python中eval的使用方法,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。