python eval()內置函數


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 dictionary and 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,

這個目前還沒有用到,后續研究后進行總結。


免責聲明!

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



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