python中l(wèi)iteral_eval函數(shù)的使用小結(jié)
基本用法
from ast import literal_eval
# 將字符串轉(zhuǎn)換為Python對象
string_list = "[1, 2, 3]"
real_list = literal_eval(string_list)
print(real_list) # 輸出: [1, 2, 3]
print(type(real_list)) # 輸出: <class 'list'>
string_dict = "{'name': 'Alice', 'age': 25}"
real_dict = literal_eval(string_dict)
print(real_dict) # 輸出: {'name': 'Alice', 'age': 25}
print(type(real_dict))
與 eval() 的區(qū)別
1、安全性:literal_eval 只能解析 Python 字面量結(jié)構(gòu)(字符串、數(shù)字、元組、列表、字典、布爾值和 None),不會執(zhí)行任意代碼,因此比 eval() 安全得多。
# eval() 會執(zhí)行任何代碼 - 不安全!
eval("__import__('os').system('rm -rf /')") # 危險!
# literal_eval() 會拒絕執(zhí)行非字面量表達式
literal_eval("__import__('os').system('rm -rf /')") # 會引發(fā) ValueError
2、功能限制:literal_eval 不能計算表達式或調(diào)用函數(shù),只能處理基本的 Python 數(shù)據(jù)結(jié)構(gòu)。
支持的數(shù)據(jù)類型
literal_eval 可以安全地評估以下 Python 字面量結(jié)構(gòu):
1、字符串
2、數(shù)字(整數(shù)、浮點數(shù)、復(fù)數(shù))
3、元組
4、列表
5、字典
6、布爾值(True/False)
7、None
使用場景
1、安全地從字符串加載數(shù)據(jù)結(jié)構(gòu):當需要從外部源(如配置文件、用戶輸入)加載數(shù)據(jù)時。
2、替代 pickle/json:對于簡單的數(shù)據(jù)結(jié)構(gòu),比 pickle 安全,比 json 更靈活(json 不支持所有 Python 數(shù)據(jù)類型)。
3、配置文件解析:當配置需要包含復(fù)雜數(shù)據(jù)結(jié)構(gòu)時。
注意事項
1、雖然比 eval() 安全,但仍應(yīng)謹慎處理不受信任的輸入。
2、對于非常大的數(shù)據(jù)結(jié)構(gòu),可能會有性能問題。
3、不支持 Python 3 的字節(jié)字面量(如 b’bytes’)。
到此這篇關(guān)于python中l(wèi)iteral_eval函數(shù)的使用小結(jié)的文章就介紹到這了,更多相關(guān)python literal_eval 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python實現(xiàn)文字轉(zhuǎn)語音并播放功能
這篇文章主要給大家介紹了使用Python實現(xiàn)文字轉(zhuǎn)語音并播放功能,文中通過代碼示例給大家講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01
python處理json字符串(使用json.loads而不是eval())
eval 跟json.loads 是不一樣的函數(shù),是有實現(xiàn)不一樣功能的地方,但是在某些地方它們兩個函數(shù)的功能是一樣的,本文就詳細介紹一下2021-09-09

