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

grinner님의 프로필 이미지
grinner

작성한 질문수

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

일급함수 - 클로저(2-1)

예제 3번 UnboundLocalError 에 대한 질문입니다.

해결된 질문

작성

·

217

2

에러가 나는 정확한 이유가 무엇인가요?

1. 함수내에서 지역변수가 있는데 c가 할당되기전 이기 떄문인지,

2. 전역변수c와 지역변수 c의 할당값이 다르기 때문에 충돌이 일어나서 그런건지,

아니면 다른 이유때문인지 이해가 잘 되지 않습니다.

만약 1의 경우라면 print문 실행할 때는 전역변수 값을 출력하면 될것 같은데 안되는 이유가 잘 이해 안되고,

2의 경우라면 print문이 실행되고 나서 지역변수 c가 할당되는 것으로 이해하고 있었는데, 어떻게 출력 자체가 안되는 것인지 궁금합니다.

답변 1

3

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

안녕하세요.

2번의 경우는 할당과 충돌의 개념이 아니라, 스코프 영역에 따른 참조 방법입니다.

최근에 비슷한 질문이 있었는데 참고 자료(정말 자세합니다.) 링크해 드립니다. 꼼꼼히 읽어보세요.

아울러 python 변수 scope , nonlocal, global 등에 대해서 다시 한 번 

학습해 보시기 바랍니다.

https://soooprmx.com/archives/5854

섀도우잉 (Shadowing)

섀도우잉(shadowing)은 특정한 스코프 내에서 선언된 이름이 그 외부 스코프와 중첩되는 것을 말한다. 다른 말로는 네임 마스킹이라고 하는데, 스코프 계층에서 중복된 이름이 발견되면, 로컬 이름 공간이 우선적으로 참조되며 전역 변수는 액세스가 되지 않는다. 파이썬에서는 로컬 이름공간과 전역 이름 공간 두 가지 밖에 없으므로, 함수 내에서 변수명을 참조하면 다음과 같은 순서대로 참조한다.

grinner님의 프로필 이미지
grinner

작성한 질문수

질문하기