一、描述
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'))