首頁 > 後端開發 > Python教學 > Python 2 和 Python 3 之間的 Exec 函數行為有何不同?

Python 2 和 Python 3 之間的 Exec 函數行為有何不同?

Linda Hamilton
發布: 2024-11-14 22:02:02
原創
891 人瀏覽過

How Does Exec Function Behavior Differ Between Python 2 and Python 3?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板