巢狀函數作用域與 UnboundLocalError
在 Python 中,巢狀函數作用域可能會導致巢狀變數出現問題。考慮以下程式碼:
def outer(): ctr = 0 def inner(): ctr += 1 inner()
執行此程式碼時,您可能會在內部函數中遇到變數「ctr」的 UnboundLocalError。發生此錯誤的原因是內部函數嘗試修改外部函數中定義的「ctr」變量,但它在內部作用域內未被識別為局部變數。
要解決此問題,有兩種方法:
Python 3:
在Python 3 中,非局部語句可讓您修改巢狀函數中的非局部變數:
def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1 inner()
Python 2:
Python 2 缺少nonlocal 語句,但解決方法是使用資料結構來保存變數,而不是直接使用變數名稱:
def outer(): ctr = [0] # Store the counter in a list def inner(): ctr[0] += 1 inner()
透過使用此方法,您可以避免裸名重新綁定並確保內部函數可以修改預期變數。
以上是如何處理 Python 巢狀函數作用域中的 UnboundLocalError?的詳細內容。更多資訊請關注PHP中文網其他相關文章!