Home [Python] NameSpace 정리
Post
Cancel

[Python] NameSpace 정리

Python NameSpace 정리

네임스페이스(namespace, 이름공간)란 프로그래밍 언어에서 특정한 객체(Object)를 이름(Name)에 따라 구분할 수 있는 범위

  • 파이썬 내부의 모든것은 객체로 구성되며 이들 각각은 특정 이름과의 매핑 관계를 가짐
  • 이 매핑을 포함하는 공간이 네임스페이스
  • 프로그래밍언어에서는 네임스페이스라는 개념을 도입하여, 특정한 하나의 이름이 통용될 수 있는 범위를 제한
  • 소속된 네임스페이스가 다르다면 같은 이름이 다른 개체를 가리키도록 하는 것이 가능

Python의 네임스페이스 분류

  • 전역 네임스페이스: 모듈별로 존재하며, 모듈 전체에서 통용될 수 있는 이름들이 소속
  • 지역 네임스페이스: 함수 및 메서드 별로 존재하며, 함수 내의 지역 변수들의 이름들이 소속
  • 빌트인 네임스페이스: 기본 내장 함수 및 기본 예외들의 이름들이 소속된다. 파이썬으로 작성된 모든 코드 범위가 포함

image

파이썬의 네임스페이스 특징

  • 네임스페이스는 딕셔너리 형태로 구현
  • 모든 이름 자체는 문자열로 되어있고 각각은 해당 네임스페이스의 범위에서 실제 객체를 가리킨다.
  • 이름과 실제 객체 사이의 매핑은 가변적(Mutable)이므로 런타임동안 새로운 이름이 추가될 수 있다.
  • 다만, 빌트인 네임스페이스는 함부로 추가하거나 삭제할 수 없다.


python 변수 스코프 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# namespace_example01.py
def outer_func():
    a = 20
    def inner_func():
        a = 30
        print("a = %d" % a)

    inner_func()
    print("a = %d" % a)

a = 10
outer_func()
print("a = %d" % a)

>>>
a = 30
a = 20
a = 10

  • 맨위 outer_func가 정의되지만 인터프리터는 함수 정의부분은 정의만하고 실행하지 않음.
  • 따라서 가장 먼저 실행되는 부분은 함수 정의 밑부분인 a = 10
  • a = 10가 실행되면 이 모듈의 전역 변수로 a가 추가.
  • 그 다음으로 outer_func가 실행되서 함수 내부의 지역 변수로 또 다시 a = 20으로 선언
  • 다음 inner_func의 정의 부분은 다시 또 뛰어넘고 inner_func가 실행
  • inner_func 내부에서는 지역 변수로 a = 30이 정의가 되며 여기서 a를 출력시 외부 지역 변수 및 전역 변수 a들을 모두 무시하고 현재 스코프의 지역 변수 a가 출력

마찬가지로 outer_func가 실행되는 부분에서도 a는 현재 함수의 스코프의 지역 변수인 a가 출력된다. 그리고 마지막으로 전역 변수 a가 출력


NameSpace 개념을 통한 if name == ‘main‘:의 의미

  • 현재 모듈의 네임스페이스가 __main__에 해당한다면, 즉 현재 모듈이 커맨드 라인 상에서 직접 실행되는 경우에만 if문 이하를 실행하라는 의미
This post is licensed under CC BY 4.0 by the author.