【基础15】【自学笔记】Python函数eval()和 ast.literal_eval区别
一、描述
eval() 函数用来执行一个字符串表达式,并返回表达式的值。 ast.literal_eval()函数是eval()的升级版本,使用更加安全
二、具体用法
eval() 语法:
eval(expression[, globals[, locals]])
参数
- expression -- 表达式。
- globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
>>>x = 7 >>> eval( '3 * x' ) 21 >>> eval('pow(2,2)') 4 >>> eval('2 + 2') 4 >>> n=81 >>> eval("n + 4") 85
ast.literal_eval()语法:
import ast
res1="[1,2,3]"
res2="(1,2,3)"
res3="{'name':'test1','password':123456}"
print(ast.literal_eval(res1))
print(ast.literal_eval(res2))
print(ast.literal_eval(res3))
print(type(ast.literal_eval(res1)))
print(type(ast.literal_eval(res2)))
print(type(ast.literal_eval(res3)))
运行结果:
总结:
1、eval针对用户而已输入的字符串,eval就会不管三七二十一照样执行,读取你的电脑目录结构,文件,删除文件
open(r'D://filename.txt', 'r').read()
__import__('os').system('dir')
__import__('os').system('rm -rf /etc/*')
2、模块下的literal_eval()函数:则会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。
import ast
print(ast.literal_eval('1+2'))
本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/16092665.html