1. 程式人生 > 其它 >【基礎15】【自學筆記】Python函式eval()和 ast.literal_eval區別

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