Fork me on GitHub

【基础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'))

 

posted @ 2022-04-02 16:13  橘子偏爱橙子  阅读(1246)  评论(0编辑  收藏  举报