首頁 >後端開發 >Python教學 >為什麼Python在修改函數內部的全域變數時會拋出「UnboundLocalError」?

為什麼Python在修改函數內部的全域變數時會拋出「UnboundLocalError」?

Linda Hamilton
Linda Hamilton原創
2024-12-24 16:47:13853瀏覽

Why Does Python Throw an `UnboundLocalError` When Modifying a Global Variable Inside a Function?

UnboundLocalError:變數賦值優先於全域宣告

在 Python 中遇到 UnboundLocalError 時,了解變數賦值相對於全域宣告的優先權至關重要。讓我們使用提供的程式碼深入研究具體細節:

a, b, c = (1, 2, 3)

def test():
    print(a)
    print(b)
    print(c)
    c += 1
test()

在探索錯誤之前,讓我們先解決「a」和「b」的成功列印問題。對於這些變量,在 'test()' 函數中沒有賦值,因此 Python 將它們視為全域變量,並從外部作用域中檢索它們的值。

但是,當在內部為 'c' 賦值時函數 ('c = 1') 中,Python 建立一個名為 'c' 的局部變數。此局部變數會覆寫全域“c”,並且函數內對“c”的任何後續引用都將引用本機版本。因此,當執行“print(c)”行時,它會嘗試列印未分配的局部變量,從而導致“UnboundLocalError”。

要解決此問題,可以明確聲明使用全域變數透過新增「global c」作為第一行,在「test()」函數中新增「c」變數。或者,在 Python 3 中,「nonlocal c」可用於存取包含名為「c」的變數的最近的封閉函數作用域。

以上是為什麼Python在修改函數內部的全域變數時會拋出「UnboundLocalError」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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