python eval()內建函式
阿新 • • 發佈:2018-12-24
python有一個內建函式eval(),可以將字串進行執行。
通過help(eval)檢視幫助文件
Help on built-in function eval in module builtins: eval(source, globals=None, locals=None, /) Evaluate the given source in the context of globals and locals. The source may be a string representing a Python expression or a code object as returned by compile(). The globals must be a dictionaryand locals can be any mapping, defaulting to the current globals and locals. If only globals is given, locals defaults to it.
eval(source,globals=None,locals= None)
eval()函式預設是沒有globals,locals,
如果提供則globals屬性必須是一個字典dict型別,而locals 可以是任意對映
一般使用input函式,是str型別,如果進行數值運算,需要進行型別轉化
a = input("Enter a number:\n")
從鍵盤輸入一個數值
a = 2
type(a)
為str型別
而 使用eval()內建函式
a = eval(input("enter a number:\n"))
type(a)
<class 'int'>
則為int。
eval()函式可以將字串str當成有效的表示式來求值並返回計算結果
昨天學習碰見一個題目,給做錯了,現在記錄一下。
number = eval('5'+'1*2') # 7是錯誤,正確答案是102
想當然的選擇了答案是7,這個是錯誤的。
正確答案是:102.
因為這個eval()函式內有兩個字串"5"和"1*2",所以括號內首先做字串連線,變成一個新的字串"51*2",eval去掉雙引號後,才能進行算數運算,得到數字102
再舉個例子
number2 = eval('1'+'2*3'+'4*5')
# number2的值
print(number2)
2040
先拼接字串,"12 *34*5"然後再去掉雙引號進行算數運算,得到12*34*5=2040
eval()有一個壞處就是不太安全,如果使用者輸入一些字串是惡意程式碼,則對系統不好,則需要使用
使用ast.literal_eval,
這個目前還沒有用到,後續研究後進行總結。