exec函式 python 使用exec的疑惑

2021-10-11 08:25:52 字數 1164 閱讀 5409

簡介

exec 執行儲存在字串或檔案中的python語句,相比於 eval,exec可以執行更複雜的 python **。

exec函式功能強大,也很容易上手,在做未知變數定義時很好用。例如↓

使用exec函式可以將其中的字串語句定義為變數:

with open("data.txt","r",) as f:        for line in f.readlines():            exec(line) print("speed=",speed,type(speed))
執行結果:

speed: 20
簡單方便,看起來和普通定義的變數沒什麼區別。但是,當執行下面這段看似正常的**時卻報了錯

def main():    exec("m=2")    print(m)main()
報錯資訊:

nameerror: name 'm' is not defined
報錯資訊提示m未定義,明明前一行剛用exec定義了m,下面卻報了未定義的錯。修改**:

def main():    exec("m=2")    fun()    print(eval("m"))main()
此次執行結果正常,說明eval對exec定義的變數能夠正常執行。

修改**,將exec函式放在最外層執行:

exec("m=2")def main():    print(m)main()
執行結果正常。

再次修改**,將main.m定義為全域性變數:

def main():    exec("main.m=2")    print("main.m=",main.m)main()
執行結果:

main.m=2
這裡的原因不明。不過根據我的實驗和猜測原因可能與變數的作用域有關,exec定義的區域性變數,只能使用eval呼叫。exec定義的全域性變數則可以通用,所以建議在使用exec函式定義變數使,採用全域性變數的定義方法。

exec函式族的使用

呼叫shell指令碼命令 execlp sh sh filename char 0 exec用被執行的程式完全替換呼叫它的程式的影像。fork建立乙個新的程序就產生了乙個新的pid,exec啟動乙個新程式,替換原有的程序,因此這個新的被exec執行的程序的pid不會改變,和呼叫exec函式的程序一樣...

exec函式族的使用

exec函式族的使用 exec用被執行的程式完全替換呼叫它的程式的影像。fork建立乙個新的程序就產生了乙個新的pid,exec啟動乙個新程式,替換原有的程序,因此這個新的被exec執行的程序的pid不會改變,和呼叫exec函式的程序一樣。下面來看下exec函式族 include int execl...

exec函式族的使用

exec用被執行的程式完全替換呼叫它的程式的影像。fork建立乙個新的程序就產生了乙個新的pid,exec啟動乙個新程式,替換原有的程序,因此這個新的被exec執行的程序的pid不會改變,和呼叫exec函式的程序一樣。下面來看下exec函式族 include int execl const char...