如何處理 Python 巢狀函數作用域中的 UnboundLocalError?

Barbara Streisand
發布: 2024-10-21 18:42:03
原創
173 人瀏覽過

How to Handle UnboundLocalError in Python's Nested Function Scopes?

巢狀函數作用域與 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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!