1 eval
1.1 字符串型數(shù)據(jù)還原本身類型
python中,eval可以將字符串型的list,tuple,dict轉(zhuǎn)變成原有的類型。
即,eval可以把數(shù)據(jù)還原成它本身或者是能夠轉(zhuǎn)化成的數(shù)據(jù)類型。
//string 轉(zhuǎn) list
>>> str_list='[1,2,3,4]'
>>> eva_list=eval(str_list)
>>> str_list;eva_list
'[1,2,3,4]'
[1, 2, 3, 4]
>>> type(str_list);type(eva_list)
<type 'str'>
<type 'list'>
//string 轉(zhuǎn) tuple
>>> str_tuple='(1,2,3)'
>>> eval_tuple=eval(str_tuple)
>>> str_tuple;eval_tuple
'(1,2,3)'
(1, 2, 3)
>>> type(str_tuple);type(eval_tuple)
<type 'str'>
<type 'tuple'>
//string 轉(zhuǎn) dict
>>> str_dict="{'name':'nihao'}"
>>> eval_dict=eval(str_dict)
>>> str_dict;eval_dict
"{'name':'nihao'}"
{'name': 'nihao'}
>>> type(str_dict);type(eval_dict)
<type 'str'>
<type 'dict'>
1.2 字符串型數(shù)據(jù)進(jìn)行運(yùn)算
>>> ret=eval(raw_input('請(qǐng)輸入字符串:'))
請(qǐng)輸入字符串:1+1
>>> ret
2
1.3 字符串型語句命令
只要eval能解析的字符串,都會(huì)當(dāng)做合法的表達(dá)式或命令執(zhí)行,而不顧可能帶來的后果。
>>> open(r'E://filename.txt','r').read
>>> __import__('os').system('dir')
>>> __import__('os').system('rm -rf /etc/*')
eval強(qiáng)大的背后,是巨大的安全隱患。比如上面的刪除文件。
所以,才有了ast.literal_eval。
2 literal_eval
ast.literal_eval(),先判斷執(zhí)行的內(nèi)容是不是合適的python類型,如果是則執(zhí)行,否則就不執(zhí)行。
這樣可以大大降低系統(tǒng)的危險(xiǎn)性,所以,對(duì)字符串進(jìn)行類型轉(zhuǎn)換的時(shí)候,最好是用ast.literal_eval()函數(shù)。
2.1 合適數(shù)據(jù)類型
# 合適數(shù)據(jù)類型
>>> ast.literal_eval('[1,2,3]')
[1, 2, 3]
>>> ast.literal_eval('(1,2,3)')
(1, 2, 3)
>>> ast.literal_eval("{'name':'nihao'}")
{'name': 'nihao'}
2.2 不合適數(shù)據(jù)類型
# 不合適數(shù)據(jù)類型
>>> ast.literal_eval('1+1')
Traceback (most recent call last):
File "
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7234瀏覽量
90887 -
python
+關(guān)注
關(guān)注
56文章
4823瀏覽量
86038 -
EVAL
+關(guān)注
關(guān)注
0文章
34瀏覽量
8740
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問EVAL-ADISZ和EVAL-ADIS2有哪些區(qū)別?
AST3TQ評(píng)估板旨在促進(jìn)AST3TQ系列TCXO和VCTCXO的電氣性能測(cè)試
ASMT-JR30-AST01 3W迷你大功率LED

ASMT-AR30-AST00 3W大功率LED

ASMT-AR00-AST00 1W大功率LED

ASMT-AR00-AST01 1W大功率LED

ASMT-JR10-AST01 1W迷你大功率LED

基于AST3TQ-EVAL晶體振蕩器的參考設(shè)計(jì)

評(píng)論