【干货!】python常识系列19-->eval()函数使用-IT知识库

【干货!】python常识系列19-->eval()函数使用-IT知识库

咨询热线

0731-82115773

精选文章 > IT知识库 > 【干货!】python常识系列19-->eval()函数使用

【干货!】python常识系列19-->eval()函数使用

时间:2021-01-21  发布:新梦想培训  来源:新梦想IT职业教育

前言:把现在的工作做好,才能幻想将来的事情,专注于眼前的事情,对于尚未发生的事情而陷入无休止的忧虑之中,对事情毫无帮助,反而为自己凭添了烦恼。

一、eval()函数是什么?

1、Python的一个内置函数

2、返回传入字符串的表达式结果(官方)


二、eval()函数语法解析

eval(expression[, globals[, locals]])

# expression :表达式。

# globals :变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。

# locals :变量作用域,局部命名空间,如果被提供,可以是任何映射对象。


三、eval()函数应用举例

3.1 eval()基本应用举例

print(eval('66+72')) # 把字符串解析成66+72的结果

print( eval("{'name':'linux','age':18}") ) # 把字符串转为字典

print( eval("[[1,2], [3,4], [5,6], [7,8], [9,0]]") ) # 把字符串转为列表

print(eval("{'name':'linux','age':age}",{"age":18})) # 传递globals参数值为{“age”:18}

age=18

print(eval("{'name':'linux','age':age}",{"age":20},locals())) # 传递locals参数


上述例子中,展示了eval()的3个应用:

1、把字符串转化为代码表达式求结果,如 66+72

2、把字符串转化为其它数据类型,如字典、列表、元组、集合等

3、传递globals参数和locals参数,当两个参数都存在时,先查找locals参数,再查找globals参数,locals参数中同名变量会覆盖globals中的变量。


3.2 eval()危害举例

str1 = "__import__('os').system('rm -rf ./a.txt')"  # 删除当前目录下的a.txt文件

eval( str1 )
str2 = "__import__('os').system('ls')" # 显示当前代码路径下的所有代码文件名称

eval( str2 )

上述例子中,eval()将字符串转成表达式并执行,就可以利用其执行系统命令,删除文件等操作。


3.3 ast.literal_eval()替代eval()实现数据类型转换

import ast

print( ast.literal_eval("{'name':'linux','age':18}") )

print( ast.literal_eval("[[1,2], [3,4], [5,6], [7,8], [9,0]]") )

上述代码也能完成类型转换,但由于没有使用eval(),所以产生的安全风险较小。
literal_eval() 函数:会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。


END


大咖面授 免费试听

【干货!】python常识系列19-->eval()函数使用-IT知识库
技术支持 英铭科技