exec 函數在 Python 2 和 Python 3 之間表現出不同的行為。在 Python 2 中,exec 是一個語句,而在Python 3中,它已經轉變為函數。這種區別對其與局部變數的交互作用具有重要意義。
在 Python 2 中,exec 語句允許修改函數作用域內的局部變數。當執行 exec 語句時,Python 編譯器會暫時停用本機範圍最佳化,並切換到較慢的尋找策略來存取本機和全域變數。此外,如果未提供明確全域變數和局部變數參數,則 exec 語句中宣告的任何變數都會自動複製回函數的局部變數。
在 Python 3 中, exec()函數嚴格遵循函數作用域的規則。它不能再修改函數局部範圍內的變量,即使它們之前已經聲明過。 Locals() 能夠在一個方向上反映局部變量,但從未支援透過 locals() 進行修改。
為了實現在 Python 2 中觀察到的所需行為,它在 Python 3 中呼叫 exec() 時,有必要使用單獨的命名空間。透過將自訂字典傳遞給 exec() 函數,可以修改和存取該命名空間內的變數。
以下程式碼示範了在Python 3 中使用exec() 的正確方法:
這種方法確保函數的本地作用域保持不變,同時仍然允許修改定義的命名空間。
以上是「exec」函數在 Python 2 和 Python 3 中的行為有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!