Python中eval的使用方法

  介绍

本篇文章为大家展示了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的使用方法,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

Python中eval的使用方法