【基礎15】【自學筆記】Python函式eval()和 ast.literal_eval區別
阿新 • • 發佈:2022-04-02
一、描述
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'))