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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM