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 /')") # 危險(xiǎn)!
# literal_eval() 會拒絕執(zhí)行非字面量表達(dá)式
literal_eval("__import__('os').system('rm -rf /')") # 會引發(fā) ValueError
2、功能限制:literal_eval 不能計(jì)算表達(dá)式或調(diào)用函數(shù),只能處理基本的 Python 數(shù)據(jù)結(jié)構(gòu)。
支持的數(shù)據(jù)類型
literal_eval 可以安全地評估以下 Python 字面量結(jié)構(gòu):
1、字符串
2、數(shù)字(整數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù))
3、元組
4、列表
5、字典
6、布爾值(True/False)
7、None
使用場景
1、安全地從字符串加載數(shù)據(jù)結(jié)構(gòu):當(dāng)需要從外部源(如配置文件、用戶輸入)加載數(shù)據(jù)時(shí)。
2、替代 pickle/json:對于簡單的數(shù)據(jù)結(jié)構(gòu),比 pickle 安全,比 json 更靈活(json 不支持所有 Python 數(shù)據(jù)類型)。
3、配置文件解析:當(dāng)配置需要包含復(fù)雜數(shù)據(jù)結(jié)構(gòu)時(shí)。
注意事項(xiàng)
1、雖然比 eval() 安全,但仍應(yīng)謹(jǐn)慎處理不受信任的輸入。
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 tkinter的點(diǎn)名小程序功能的實(shí)例代碼
這篇文章主要介紹了基于python tkinter的點(diǎn)名小程序,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
使用python實(shí)現(xiàn)名片管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了使用python實(shí)現(xiàn)名片管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
使用Python實(shí)現(xiàn)文字轉(zhuǎn)語音并播放功能
這篇文章主要給大家介紹了使用Python實(shí)現(xiàn)文字轉(zhuǎn)語音并播放功能,文中通過代碼示例給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01
自學(xué)python求已知DNA模板的互補(bǔ)DNA序列
這篇文章主要為大家介紹了自學(xué)python求已知DNA模板的互補(bǔ)DNA序列的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
python處理json字符串(使用json.loads而不是eval())
eval 跟json.loads 是不一樣的函數(shù),是有實(shí)現(xiàn)不一樣功能的地方,但是在某些地方它們兩個(gè)函數(shù)的功能是一樣的,本文就詳細(xì)介紹一下2021-09-09

