首頁 >後端開發 >Python教學 >為什麼 Python 3 中的 exec 不能直接更新局部變數?

為什麼 Python 3 中的 exec 不能直接更新局部變數?

Patricia Arquette
Patricia Arquette原創
2024-12-20 19:54:12812瀏覽

Why Can't `exec` Directly Update Local Variables in Python 3?

如何無法直接使用exec 更新局部變數

Python 中的exec 呼叫是動態執行程式碼的強大工具,但是它對局部變數的修改有限制。

考慮以下內容code:

def f():
    a = 1
    exec("a = 3")
    print(a)

f()

人們可能會期望這段程式碼列印 3,但它實際上會列印 1。這是因為在 Python 3 中,局部變數不是儲存在字典中,而是儲存在編譯時確定索引的陣列中時間。 exec 函數無法在不干擾此最佳化的情況下安全地修改局部變數。

解決方案:使用 Local Dictionary 與 exec

要使用 exec 修改局部變量,您需要明確傳遞本地字典。例如:

def foo():
    ldict = {}
    exec("a = 3", globals(), ldict)
    a = ldict['a']
    print(a)

這會執行本地字典 (ldict) 中的程式碼,這與函數的本地變數陣列不同。然後可以透過存取本地字典將修改後的變數傳回函數的作用域。

Python 2 行為

在Python 2 中,exec 可以修改局部變數而無需傳遞明確字典,因為它將使用不含全域/本地參數的exec的命名空間視為「未最佳化」。然而,Python 3 中並非如此。

因此,請務必記住,在使用 exec 時,只能透過建立和傳遞本機字典來更新局部變量,以避免與編譯器的最佳化發生任何潛在衝突.

以上是為什麼 Python 3 中的 exec 不能直接更新局部變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn