」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 「exec」函數在 Python 2 和 Python 3 中的行為有何不同?

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

發佈於2024-11-19
瀏覽:168

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() 的正確方法:

def execute(a, st):
    namespace = {}
    exec("b = {}\nprint('b:', b)".format(st), namespace)
    print(namespace['b'])

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

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3