2022年3月18日 星期五

Python 內建函式 exec與 eval的差異

之前介紹過 Python 的函式入門,

那屬於使用者自訂的函式,

其實 Python 內建有許多函式可用,

這就是今天要來談的主題

Python 內建函式 exec與 eval的差異

exec 與 eval 兩者非常的相似,

用法上也很雷同,

其後可以帶兩個以字典表示的廣域變數與區域變數作為參數

範例程式碼如下:


    """eval 與 exec"""
    a = 1
    b = 2

    exec('print(int(a)+int(b))', {'a': '2', 'b': '3'})
    print(a, b)
    eval('print(int(a)+int(b))', {'a': '4', 'b': '5'})
    print(a, b)

    print(exec(input('please enter :')))
    print(eval(input('please enter :')))


使用 help() 分別查詢 exec與eval 兩者,

說明上大同小異


上面的範例程式執行的結果可以發現,

同樣執行 a+b 都不影響原本 a與b 的初始值

a = 1
b = 2

那為何要多此一舉,

不直接寫 Python 的程式碼呢?

這是因為 exec與eval 兩者,

能夠以動態方式執行使用者自訂的程式碼,

若將範例程式碼寫成文字檔丟給 Python 程式讀取,

不就能達到動態修改並執行程式碼了,

不過相對的也造成了部分的安全性問題。


不過在範例程式中讓使用者輸入執行的運算時,

可以看到 exec 的執行結果為 None ,

這是由於 exec 並不回傳執行的結果,

而 eval 能將運算結果傳回,

這就是兩者很顯著的差異,

以上就是今天要介紹的主題

Python 內建函式 exec與 eval的差異




沒有留言: