eval在python中的意思例子,python中eval的用法例子
Eval是Python的内置函数,返回传入字符串的表达式结果。想象一下,当变量被赋值时,将等号右边的表达式写成
字符串格式,把这个字符串作为eval的参数,eval的返回值就是这个表达式的结果。
python中eval函数的使用非常灵活,但也非常危险,安全性是它的劣势。本文从灵活性和危险性两个方面介绍了eval。
1.力量
举几个例子感受一下字符串和列表,元组和字典之间的转换。
a=[[1,2]、[3,4]、[5,6]、[7,8]、[9,0]]
b=评估值(a)
b
Out[3]:[[1,2]、[3,4]、[5,6]、[7,8]、[9,0]]
类型(b)
out[4]:列表
a={1:a ,2:b}
b=评估值(a)
b
Out[7]:{1:a ,2:b}
类型(b)
out[8]:
a=([1,2],[3,4],[5,6],[7,8],(9,0))
b=评估值(a)
b
Out [11] : ([1,2]、[3,4]、[5,6]、[7,8]、[9,0])。要强大,给eval一个字符串,eval会给你一个表达式返回值。
eval的语法格式如下:
Eval(表达式[,全局[,区域]])表达式:字符串
Globals:变量范围、全局名称空间(如果提供)必须是字典对象。
Locals:变量作用域、本地名称空间(如果提供的话)可以是任何映射对象。
结合全局和局部来看几个例子。
传递的全局参数值是{"age" :1822},
Eval ({name : Linux , age 3360age} ,{age 33601822})输出结果
{name : Linux , age 33601822}加上本地变量
年龄=18岁
Eval ({name : Linux , age 3360age} ,{age 33601822},locales())根据上面两个例子,我们可以看出globals参数中是否有变量,并在locals参数为空而globals参数不为空的情况下进行计算。
当两个参数都不为空时,首先查找locales参数,然后查找globals参数。局部变量参数中同名的变量将覆盖全局变量中的变量。
2.危险的地方
Eval方便,但要注意安全性。我们可以把字符串转换成表达式执行,然后可以执行系统命令,删除文件。
假设用户恶意输入。例如:
eval(__import__(os )。system( ls/home/python tab.com/www/))
然后在eval()之后,你会发现当前文件夹文件显示在用户面前。其实这句话相当于处决
OS . system( ls/home/python tab.com/www/)
然后继续输入:
eval(__import__(os )。system( cat/home/python tab.com/www/test . SQL ))
所有代码都已显示。
再执行一次删除命令,文件就会消失。例如
eval(__import__(os )。系统( RM/home/python tab.com/www/test . data ))
所以在使用eval的时候,不仅要享受它的灵活性,还要注意安全性。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。