[Python] 함수 네임스페이스
문제를 풀면서 전역 변수에 대한 접근이 함수안에서 되는지 안되는지 혼란스러워 의아했던 적이 많았는데 오늘 드디어 정리했다.
이 그림 하나면 다 설명되는 것 같다.
가장 바깥쪽이 globals()이다. 여기서 locals()를 호출해도 globals를 호출한 것과 결과는 같다.
함수 안으로 들어가면 globals와 locals의 구분이 생긴다.
이때 함수 내부에서 선언한 변수는 외부에서 접근할 수 없다. 하지만 함수 내부에서는 외부에 선언된 객체에 접근이 가능하다.
data = [1,2,3,4,5] def func(): a = 3 print(data[0]) func() print(a) | cs |
즉 이 코드의 실행 결과, 외부에서 func 내부에 선언된 a를 접근하려 했기 때문에 오류가 발생한다. 반면 func()내부에서 print 한 data 데이터는 정상적으로 출력된다.
No comments: