>  기사  >  백엔드 개발  >  Python의 중첩 함수 범위에서 UnboundLocalError를 해결하는 방법은 무엇입니까?

Python의 중첩 함수 범위에서 UnboundLocalError를 해결하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-21 18:45:02989검색

How to Resolve UnboundLocalError in Nested Function Scopes in Python?

중첩 함수 범위의 UnboundLocalError

Python에서 중첩 함수에서 외부 함수에 정의된 변수에 액세스하면 때때로 UnboundLocalError. 다음 예를 고려해보세요.

<code class="python">def outer():
    ctr = 0

    def inner():
        ctr += 1

    inner()</code>
이 코드를 실행하면 내부 함수의 ctr 변수에 대해

UnboundLocalError가 발생합니다. 이 오류는 외부 함수에 정의되어 있더라도 Python이 ctr을 내부 함수 내의 지역 변수로 처리하기 때문에 발생합니다. 이 문제를 해결하려면 내부 함수가 외부 함수의 범위에 액세스할 수 있도록 허용하는 메커니즘을 사용해야 합니다.

해결책:

Python 3에서는

nonlocal 문은 비지역 변수 수정을 허용합니다. 내부 함수에 nonlocal을 추가하면 ctr을 로컬이 아닌 변수로 명시적으로 선언하여 내부 함수 내에서 리바인딩할 수 있습니다.

<code class="python">def outer():
    ctr = 0

    def inner():
        nonlocal ctr
        ctr += 1

    inner()</code>
또는 Python 2에서는 nonlocal

문을 사용하는 경우, barename 리바인딩을 방지하기 위해 목록이나 다른 데이터 구조 내에 카운터 변수를 포함하여 이 문제를 해결할 수 있습니다.

이 접근 방식은 목록 내에서 ctr 값을 유지합니다. ctr을 사용하여
<code class="python">ctr = [0]

def inner():
    ctr[0] += 1</code>
UnboundLocalError

발생을 방지합니다.

위 내용은 Python의 중첩 함수 범위에서 UnboundLocalError를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.