[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:

Powered by Blogger.