ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 기초 문법 - 4 ('_' 언더스코어의 의미)
    Programming & Machine Learning/Python X 머신러닝 2017. 7. 27. 02:38

    4. 언더스코어의 의미

    타 언어에서 언더스코어 '_'은 단순히 스네이크 표기법 정도로만 사용이 되곤 한다. 파이썬에서 언더스코어는
    조금 특별한 기능을 하는데, 이는 파이썬이 인터프리터 언어라는 속성에 기인한다.
    

    4.1 파이썬 인터프리터에서의 사용

    위 그림은 IPython으로 파이썬 인터프리터를 실행한 것이다. 
    언더스코어는 다음에서 볼 수 있듯, 마지막 변수를 저장하는 역할을 한다.
    

    4.2 특정 값을 skip할 때

    a, _, b = 1, 3, 2
    # a=1, b=2
    a, _, b = [1, 2, 3]
    # a=1, b=3
    
    for _ in range(10):
        print("hello")

    4.3 숫자의 구분자로써 활용

    a = 1_000_00_0
    # a=1000000
    b = 0b_11_0_1
    # b=13

    4.4 네이밍의 용도

    언더스코어 네이밍은 주로 파이썬에서 public, private을 구분하기 위한 용도로 많이 사용한다.
    더블 언더스코어로 멤버 변수나 멤버 함수를 선언하게 되면, 마치 private처럼 동작하게 된다.
    언더스코어를 싱글로 사용하게 되면 같은 모듈 안에서는 public처럼 동작하면서
    명시적으로 사용하는 것이 가능하지만, 다른 모듈에서 해당 변수에 접근하려고 하면 private처럼 동작한다. 
    즉, 모듈로써 다른곳에서 사용할 경우에는 import가 되지 않는다.
    
    ### 더블 언더스코어 사용 시, private처럼 활용 가능.
    class HasPrivate:
    
        def __init__(self):
            self.public = "Public"
            self.__private = "Private"
    
        def print_from_internal(self):
            print(self.public)
            print(self.__private)
    
        def public_print(self):
            print("public print")
            self.__private_print()
            
        def __private_print(self):
            print("private print")
            
    obj = HasPrivate()
    obj.print_from_internal()
    print(obj.public)
    print(obj.__private) # error
    obj.public_print()
    obj.__private_print() # error
    # 다른 모듈에서는 '_' 만 해줘도 접근 불가능!

    4.5 스페셜 변수 혹은 스페셜 메서드

    __name__이나 __init__, __len__ 처럼 파이썬에서 특별한 문법적 기능이나, 
    특별한 기능을 제공하는 스페셜 변수나 메서드의 구성을 언더스코어로 표현한다. 
    네이밍과 더불어 언더스코어를 가장 빈번히 사용하는 용도이다.
    

    4.6 맹글링을 위한 용도

    맹글링이란, 프로그래밍 언어 자체적으로 일정한 규칙에 의해 변수나 함수의 이름을 변경하는 것이다.
    파이썬에서 맹글링은 _Class+[name] 의 형식으로 이루어지는데, 맹글링을 호출하는 것이 바로 언더스코어이다.
    
    다음의 두 이미지는 맹글링이 적용되어 오버라이딩이 되지 않는 예와, 맹글링이 적용되지 않아 오버라이딩 된 예이다.
    



    댓글

분노의 분석실 Y.LAB