Python 2 與Python 3 中的Exec 函數行為
exec 語句在Python 2 和Python 3 之間表現出明顯的行為差異。 2、exec 充當了一個語句,有效地改變了函數作用域內的局部變數。
但是,在Python 3 中,exec() 變成一個函數。這可以防止在 Python 2 中修改函數內部的局部變數。此外,即使是先前聲明的變數也是不可修改的。
locals() 函數只允許單方面更新局部變數。例如,在以下Python 2 程式碼中:
def foo(): a = 'spam' locals()['a'] = 'ham' print(a) # prints 'spam'
將'ham' 賦值給locals()['a'] 不會影響函數內變數'a' 的值,並且'spam' 仍然被列印.
在 Python 2 中,exec 使用 PyFrame_LocalsToFast 明確地將 locals() 中找到的變數複製回函數局部變數。然而,在 Python 3 中,這種行為不再可能。
要在 Python 3 中實作所需的行為,必須在 exec() 呼叫期間使用新的命名空間(例如字典)。這可以在以下Python 3 程式碼中看到:
def execute(a, st): namespace = {} exec("b = {}\nprint('b:', b)".format(st), namespace) print(namespace['b'])
exec() 文件明確說明了對locals() 使用施加的限制:
「注意:預設的局部變數充當下面對函數locals() 進行了描述:如果您需要在函數exec()之後查看程式碼對局部變數的影響,則不應嘗試修改預設局部變數字典。
以上是Python 2 和 Python 3 之間的 Exec 函數行為有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!