중첩 함수 범위의 UnboundLocalError
Python에서 중첩 함수에서 외부 함수에 정의된 변수에 액세스하면 때때로 UnboundLocalError. 다음 예를 고려해보세요.
<code class="python">def outer(): ctr = 0 def inner(): ctr += 1 inner()</code>
UnboundLocalError가 발생합니다. 이 오류는 외부 함수에 정의되어 있더라도 Python이 ctr을 내부 함수 내의 지역 변수로 처리하기 때문에 발생합니다. 이 문제를 해결하려면 내부 함수가 외부 함수의 범위에 액세스할 수 있도록 허용하는 메커니즘을 사용해야 합니다.
해결책:
Python 3에서는nonlocal 문은 비지역 변수 수정을 허용합니다. 내부 함수에 nonlocal을 추가하면 ctr을 로컬이 아닌 변수로 명시적으로 선언하여 내부 함수 내에서 리바인딩할 수 있습니다.
<code class="python">def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1 inner()</code>
문을 사용하는 경우, barename 리바인딩을 방지하기 위해 목록이나 다른 데이터 구조 내에 카운터 변수를 포함하여 이 문제를 해결할 수 있습니다.
이 접근 방식은 목록 내에서 ctr 값을 유지합니다. ctr을 사용하여<code class="python">ctr = [0] def inner(): ctr[0] += 1</code>
발생을 방지합니다.
위 내용은 Python의 중첩 함수 범위에서 UnboundLocalError를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!