Python 2 和Python 3 中exec 的行為
在Python 2 中,exec 語句作為語句,允許開發者作為動態執行Pyt 。然而,在 Python 3 中,exec 變成了一個函數 exec(),導致了一些行為差異。
Exec 函數行為
一個明顯的差異是本地變數的處理變數。在Python 2中,使用exec語句可以修改函數作用域內的局部變數。例如:
def test(): a = 42 exec("a = 100") print(a) # Output: 100
但是,在 Python 3 中,此功能不再可用。使用 exec() 函數執行程式碼不會修改局部變量,即使事先聲明了它們。這是因為函數作用域在 Python 3 中始終進行了最佳化。
在 Python 3 中實現 Python 2 行為
複製 Python 2 的行為,其中 exec 修改局部變量,Python 3 提供了一種不同的方法。開發人員需要使用新的命名空間而不是本機範圍。這可以透過建立字典並將其傳遞給 exec() 函數來完成:
def test(): a = 42 namespace = {} exec("a = 100", namespace) print(a) # Output: 42 print(namespace['a']) # Output: 100
在此範例中,exec() 函數使用命名空間字典進行變數操作。然後使用命名空間檢索“a”的修改值。
局部變數的強制轉換
在 Python 3 中,某些強制變數可能會導致 exec 出現意外行為。以下範例示範:
def test(): a = 42 d = locals() exec("a = 100\nprint('b:', a)", globals(), d) print(a) # Output: 42 print(d['a']) # Output: 100
這裡,exec() 函數內的「a」變數被強制為「b」變量,導致印出不同的值。這說明了 locals() 在影響使用 exec() 宣告的變數方面的限制。
以上是Python 2 與 Python 3 之間「exec」的行為有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!