Python3——使用exec和eval執行字符串及計算其結果


1.exec()將字符串作為代碼運行

exec("print('hello,world')")
>>hello,world

exec函數主要用於動態地創建代碼字符串。如果這種字符串來自其他地方,就幾乎無法確定它將包含什么內容。因此為了安全起見,要提供一個字典以充當命名空間

命名空間:可以視為一個放置變量的地方,類似於一個看不見的字典。因此,當你執行語句x=1時,將在當前命名空間存儲鍵x和值1。當前命名空間通常是全局命名空間,但也並非必然如此。

from math import sqrt
scope={}
exec('sqrt=1',scope)
sqrt(4)
>>2.0
scope['sqrt']
>>1

如此可見,可能帶來破壞的代碼並非覆蓋函數sqrt。sqrt函數該怎樣還怎樣,而通過exec執行賦值語句創建的變量位於scope中。

2. eval()

eval是一個類似於exec的內置函數。 
exec執行一系列Python語句,而eval計算用字符串表示的Python表達式的值,並返回結果。(exec什么都不返回,因為它本身是條語句) 
與exec一樣,也可以向eval提供一個命名空間。

eval(input("input an expression:"))
>input an expression:4+8
>12

 


免責聲明!

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



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