eval()我在玩耍時偶然發現了Python中的一個函數。我想不出需要此功能的情況,除了可能是語法糖。誰能舉一個例子?
3 回答

慕俠2389804
TA貢獻1719條經驗 獲得超6個贊
eval并且exec是一種方便快捷的方法,可以動態地獲取一些源代碼,也許要稍加修改然后執行它-但是,它們從來都不是最好的方法,尤其是在生產代碼中,而不是“快速且臟”的原型&c。
例如,如果我不得不處理這樣的動態Python源代碼,那么我會使用ast模塊- ast.literal_eval比得多eval(如果它是一次性的,并且可以依賴于表達式的字符串形式,則可以直接以字符串形式調用它)僅在簡單常量上,或者node = ast.parse(source)先執行,然后進行node遍歷,也許與合適的訪問者一起對它進行修改,例如進行變量查找,然后literal_eval是節點)-或者,一旦將節點置于適當的形狀并對其進行安全性審查,我可以compile它(產生一個代碼對象)并以此構建一個新的函數對象。遠不那么簡單(除非與最簡單的情況ast.literal_eval一樣簡單eval!),但是在生產質量的代碼中更安全,更可取。
對于許多任務,我見過的人(AB-)的使用exec和eval對,Python的功能強大的內置插件,如getattr和setattr,索引到globals(),&C,提供最好而事實上往往簡單的解決方案。對于諸如JSON解析之類的特定用途,庫類json更好,例如(例如,請參見SilentGhost對耳鳴的評論)。等等...
添加回答
舉報
0/150
提交
取消