0
다음 코드를 Python3.4에서 실행하려고하는데 오류가 발생합니다.함수 내 함수에서 변수에 액세스하는 방법
def checknumner():
i = 0
print("checknumber called...")
def is_even():
print("is_even called...")
global i
if i % 2 == 0:
print("Even: ", i)
else:
print("Odd: ", i)
i += 1
return is_even
c = checknumner()
print(c())
print(c())
print(c())
하위 기능에서 변수 "i"에 액세스 할 수 없습니다.
내가 주석 때 "내가 전역"
D:\Study\Python>python generator_without_generator.py checknumber called... is_even called... Traceback (most recent call last): File "generator_without_generator.py", line 24, in <module>
print(c()) File "generator_without_generator.py", line 16, in is_even
if i % 2 == 0: UnboundLocalError: local variable 'i' referenced before assignment
내가 추가 한 Statment는 "전 세계"한 Statment는
D:\Study\Python>python generator_without_generator.py checknumber called... is_even called... Traceback (most recent call last): File "generator_without_generator.py", line 24, in <module>
print(c()) File "generator_without_generator.py", line 16, in is_even
if i % 2 == 0: NameError: name 'i' is not defined
사람이 설명해 주시겠습니까?
왜'에서 필요한 모든 nonlocal'입니다 : 약
nonlocal
더 많은 정보? 귀하의 예에서도, 이것은 단지 클로저입니다. 즉 내부 함수가 외부 함수에 정의 된 변수에 액세스 할 수 있습니다. –
편집 : 그것은 참조 오류를 일으키는'i + = 1' 라인입니다. 그러나, 주어진 코드로 반복적 인 호출에서도'i'는 결코 증가하지 않으며,'i'는 여전히 클로저 범위를 통해 접근 할 수 있습니다. –
@Vincenzzzochi "I"값이 증가하고 nonlocal을 사용하면 완벽하게 작동합니다. – n33rma