簡介
exec 執行儲存在字符串或文件中的Python語句,相比於 eval,exec可以執行更複雜的 Python 代碼。
exec函數功能強大,也很容易上手,在做未知變量定義時很好用。例如↓
有一個文本文件內容如下:
使用exec函數可以將其中的字符串語句定義為變量:
with open(&34;,&34;,) as f: for line in f.readlines(): exec(line) print(&34;,speed,type(speed))
執行結果:
speed: 20 <class &39;>
簡單方便,看起來和普通定義的變量沒什麼區別。但是,當執行下面這段看似正常的代碼時卻報了錯
def main(): exec(&34;) print(m)main()
報錯信息:
NameError: name &39; is not defined
報錯信息提示m未定義,明明前一行剛用exec定義了m,下面卻報了未定義的錯。修改代碼:
def main(): exec(&34;) fun() print(eval(&34;))main()
此次執行結果正常,說明eval對exec定義的變量能夠正常運行。
修改代碼,將exec函數放在最外層執行:
exec(&34;)def main(): print(m)main()
執行結果正常。
再次修改代碼,將main.m定義為全局變量:
def main(): exec(&34;) print(&34;,main.m)main()
執行結果:
main.m=2
這裡的原因不明。不過根據我的實驗和猜測原因可能與變量的作用域有關,exec定義的局部變量,只能使用eval調用。exec定義的全局變量則可以通用,所以建議在使用exec函數定義變量使,採用全局變量的定義方法。