Python 2 與 Python 3 中 exec 函數的行為
在 Python 2 和 Python 3 中,exec函數在行為上表現出顯著差異.
差異的原因
在Python 2 中,exec 是一個明確禁用局部作用域最佳化並允許存取局部和全域作用域中的變數的語句。相較之下,Python 3 的 exec() 是一個始終最佳化函數作用域的函數。
對變數綁定的影響
在 Python 2 中,當使用 exec 語句時,變數在 locals() 中找到的內容被複製回函數 locals。這導致將函數內的變數綁定到 exec 語句中指定的值。
但是,在 Python 3 中,exec() 預設沒有此行為。因此,函數內的變數不會綁定到 exec() 語句中的變數。
存取局部變數
在Python 3 中使用exec() 存取局部變量,應建立一個新的命名空間(通常是字典)並將其作為參數傳遞給函數。
修訂後的程式碼
下面是一個修訂後的程式碼範例,示範了在Python 3中正確使用exec()來實現Python 2的行為:
def execute(a, st): namespace = {} exec("b = {}\nprint('b:', b)".format(st), namespace) print(namespace['b'])
在此程式碼中,建立了一個名為namespace的字典並將其傳遞給exec()。 exec() 語句中定義的任何變數都可以透過字典存取。
註解
exec() 文件明確警告不要嘗試修改預設的本機字典,因為它可能不會反映 exec() 呼叫中所做的變更。
以上是Python 2 和 Python 3 中「exec」函數的行為有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!