首頁 >後端開發 >Python教學 >「exec」函數在 Python 2 和 Python 3 中的行為有何不同?

「exec」函數在 Python 2 和 Python 3 中的行為有何不同?

Patricia Arquette
Patricia Arquette原創
2024-11-12 15:07:01630瀏覽

How does the `exec` function behave differently in Python 2 and Python 3?

Python 2 和 Python 3 中 exec 函數的行為

exec 函數在 Python 2 和 Python 3 之間表現出不同的行為。在 Python 2 中,exec 是一個語句,而在Python 3中,它已經轉變為函數。這種區別對其與局部變數的交互作用具有重要意義。

Python 2 行為

在 Python 2 中,exec 語句允許修改函數作用域內的局部變數。當執行 exec 語句時,Python 編譯器會暫時停用本機範圍最佳化,並切換到較慢的尋找策略來存取本機和全域變數。此外,如果未提供明確全域變數和局部變數參數,則 exec 語句中宣告的任何變數都會自動複製回函數的局部變數。

Python 3 行為

在 Python 3 中, exec()函數嚴格遵循函數作用域的規則。它不能再修改函數局部範圍內的變量,即使它們之前已經聲明過。 Locals() 能夠在一個方向上反映局部變量,但從未支援透過 locals() 進行修改。

正確的解決方法

為了實現在 Python 2 中觀察到的所需行為,它在 Python 3 中呼叫 exec() 時,有必要使用單獨的命名空間。透過將自訂字典傳遞給 exec() 函數,可以修改和存取該命名空間內的變數。

範例程式碼

以下程式碼示範了在Python 3 中使用exec() 的正確方法:

這種方法確保函數的本地作用域保持不變,同時仍然允許修改定義的命名空間。

以上是「exec」函數在 Python 2 和 Python 3 中的行為有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn