如何在 Python 中使用 exec 更新局部變數
Python 中的 exec 函數允許在執行時間動態執行程式碼。但是,當使用 exec 為局部變數賦值時,某些行為可能會出現意外。
Python 3 中的問題
在Python 3 中,以下程式碼列印1而不是預期的3:
def f(): a = 1 exec("a = 3") print(a) f()
這是因為在Python 3 中,exec 函數預設修改全域命名空間。要修改局部變量,必須提供明確的局部字典。
Python 3 中的解
在Python 3 中使用exec 更新局部變數的正確方法是:
def foo(): ldict = {} exec("a = 3", globals(), ldict) a = ldict['a'] print(a)
Python 2 與Python 3行為
在 Python 2 中,原始程式碼的行為符合預期,因為它假設 exec 函數將修改本地命名空間。然而,Python 3 為了優化目的改變了這種行為。技術細節
在 Python 3 中,局部變數通常儲存在陣列中,而不是字典中。這種最佳化可以避免維護局部變數字典的開銷。但是,它也限制了 exec 直接修改局部變數的能力。 透過提供明確局部字典,指示 exec 函數執行該命名空間中的程式碼,從而允許更新局部變數。結論
要在 Python 3 中使用 exec 更新局部變量,必須提供明確局部字典。這可確保修改發生在正確的命名空間中並防止意外的程式碼行為。以上是如何使用Python的exec函數正確更新局部變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!