Python eval() 函式
eval() 方法會解析傳遞給它的表示式,並在程式內部執行該表示式。換句話說,它將字串解釋為 Python 程式內的程式碼。
語法
eval 的語法如下:
eval(expression, globals=None, locals=None)
其中
表示式 - 傳遞給方法的 Python 表示式。
globals - 可用全域性方法和變數的字典。
locals - 可用區域性方法和變數的字典。
在下面的示例中,我們允許使用者建立表示式並執行 Python 程式來評估該表示式。因此,它有助於建立動態程式碼。
示例
# expression to be evaluated
user_expr = raw_input("Enter an expression in terms of variable a):")
#nter the value of variable
a = int(raw_input("Enter the value of a:"))
# evaluate the expression
result = eval(user_expr)
# printing evaluated result
print("Result = {}".format(result))輸出
執行以上程式碼將得到以下結果:
Enter an expression in terms of variable a):a*(a-3)+a^2 Enter the value of a:7 Result = 33
eval() 的安全問題
對於涉及 Web 應用程式或桌面程式的程式,使用 eval() 方法可能會產生安全漏洞,因為使用該程式的人員可能會提供表示式,這些表示式是系統命令,用於刪除檔案或獲取系統中的敏感資料。為了防止這種情況,我們可以將 eval() 函式限制為某些選定的函式或變數。
防止這些漏洞的步驟如下:
在 eval() 方法中省略區域性和全域性變數。
這樣,它將只在當前作用域中進行評估,而不會找到此作用域之外的其他變數。
僅省略區域性引數
省略區域性變數後,所有變數的作用域都將作為全域性變數。接下來,我們將一個空字典作為全域性變數傳遞,這允許僅內建變數可用,即使我們已將其他庫匯入到程式中。
示例
from time import *
print(eval('dir()', {}))
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP