Re: 33.5 연습문제 질문드립니다
, 도장_ 관리자님이 작성def counter(start):
def count():
nonlocal start
start += 1
return start
return count
c = counter(1)
for i in range(10):
print(c(), end=' ')
print()
c2 = counter(10)
for i in range(20):
print(c2(), end=' ')
print()
print(c())
print(c2())
여기서도 nonlocal start가 없으면 counter 함수에 인자로 전해지는 변수 start는 count 바깥에서만 접근할 수 있고, count 내부에서는 접근할 수 없습니다. nonlocal start 선언을 지워보면 바로 에러가 나고, 그런 변수가 없다고 메시지가 표시될 겁니다. count가 보기에 start는 글로벌 프레임에 속한 것이니까요. count 함수는 count 함수 안에서 선언된 변수들만 로컬 프레임으로 볼 수 있습니다. 서로 다른 함수가 다른 함수의 변수에 마음대로 접근할 수 없으니까 각각의 변수는 함수 안에서만 유효합니다. 그러나 함수 바깥에 접근할 필요가 있을 때는, 전역 변수에 접근할 때는 nonlocal 선언으로 이 변수는 전역에 있습니다. 전역 변수로 사용하세요 라고 하는 것입니다. 클로저를 만들 때도 인자 자체가 count가 보기엔 바깥에 있으니까 접근하려면 nonlocal이 필요합니다.
다양하게 코드를 고쳐보고 실험하고, 책을 다시 반복해서 읽으세요.