回覆列表
-
1 # 樂遊劉
-
2 # 軟體測試開發技術棧
Python eval方法可以實現上述需求,具體使用介紹如下。
eval()方法介紹功能:將字串str當成有效的表示式來求值並返回計算結果。
語法: eval(source[, globals[, locals]])
引數:
source:必填,一個Python表示式的字串或者compile()返回的程式碼物件
globals:非必填,必須是dictionary
locals:非必填,任何對映物件,預設與globals引數一致
程式碼實現
如果globals,locals引數都不指定,表示式將在eval呼叫的環境中執行,即預設為globals()和locals()函式中包含的模組和函式,這就使得eval方法存在一定的安全風險。
所以出於安全考慮,對字串進行型別轉換的時候,最好使用函式,而該模組下的函式,則會判斷需要計算的內容計算後是不是合法的python型別,如果是則進行運算,否則就不進行運算。
透過eval(“計算公式”)的方式算出來。如果運算子是比較特殊的運算子可以先進行一定的處理在透過eval計算出來。例如下圖的計算過程:
eval可以很方便的將字串形式的表示式的值求出來。
eval除了可以求運算表示式之外還可以進行程式的執行,比如以下內容:
還可以巢狀執行很複雜的語句或者一些java之類的語句都可以,程式碼比較多這裡就不舉例了。
當然,在使用eval的時候要注意表示式的內容,如果涉及到輸入的方式進行動態的計算的話,一定要判斷表示式的值,方式被透過注入方式執行惡意程式碼,造成危險。