인프런 커뮤니티 질문&답변

ByoungMok Kim님의 프로필 이미지
ByoungMok Kim

작성한 질문수

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)

일급함수 - 클로저 심화(3-2)

closure_ex2()의 에러 문의

작성

·

179

0

안녕하세요, 수업 잘 듣고 있는 수강생 중 하나 입니다.

closure_ex2()에서 발생한 nonlocal 없음으로 인한 에러를 보고 몇가지 테스트를 해보고 제가 이해한 바가 맞는 건지 문의드립니다.

상위함수의 free variable region에서 cnt의 id 값을 print해보고,

내부함수 내용을 모두 지우고 cnt의 id를 print 해보니 free variable region의 cnt와 동일한 id 값을 확인할 수 있었습니다.

마치, 자바스크립트의 런타임 전에 변수가 먼저 선언된 후 런타임에서 변수에 값이 할당되는 것과 메커니즘이 같다는 생각이 들었습니다.

그래서 내부 함수에서 cnt = 3으로 할당한 후 id 값을 print 해보니 그때에는 free variable region과는 다른 id값이었습니다.

다른 질문의 답변에서 mutable과 immutable의 차이 때문이라고 하신 것보다 좀 더 깊게 이해하자면 스코프와 변수의 선언과 할당의 다른 시점에 의해 발생한 에러라고 생각이 됩니다.

내부함수에서 (cnt = cnt + 1 또는 cnt += 1 )라고 쓴 부분에서 cnt라는 변수가 런타임 이전에 선언되고 런타임에서 cnt + 1 을 수행하는데 선언만 되고 할당이 안되어 있기 때문에  reference error가 발생했다고 생각이 되는데요. 제가 이해한 바가 맞는지요?

답변 1

0

좋은사람님의 프로필 이미지
좋은사람
지식공유자

맞습니다. 실행 시점(런타임)에 따른 변수 할당 타이밍에 대한 에러입니다.

ByoungMok Kim님의 프로필 이미지
ByoungMok Kim
질문자

답변 감사합니다.

제가 스크립트 언어만 써봐서 그러는데 c, java, go 와 같은 컴파일 언어들도 변수가 먼저 선언된 후 런타임에서 할당이 되나요?

ByoungMok Kim님의 프로필 이미지
ByoungMok Kim

작성한 질문수

질문하기