Python : _ 언더스코어에 대해서

dev-swd·2021년 1월 27일
0

python

목록 보기
23/23
post-thumbnail
post-custom-banner

파이썬 코드를 보다보면 변수에 또는 메서드에 언더스코어가 들어간다. 어떤 경우에 사용할까? 그리고 그 의미는?

파이썬의 언더스코어에 대해서 궁금했었는데, 정말 잘 정리된 블로그 포스트가 있었다. 파이썬 프로그래머라면 알아두어야 할 것 같아서 정리해보기로 하였다.

참고한 포스트를 보고 싶다면?
>> 클릭해주세요 - 파이썬 언더스코어(_)에 대해서

타 언어에서는 _ 는 단지 표기법이거나 변수나 함수의 가독성을 위해서 사용되어지는 반면, 파이썬에서는 특별한 의미를 담고 있다.

크게 5가지의 경우로 사용된다.

1. 인터프리터에서 마지막 값을 저장할 때

파이썬 인터프리터에선 마지막으로 실행된 결과값이 _라는 변수에 저장된다.

> python3
Python 3.9.1 (default, Dec 10 2020, 11:11:14)
[Clang 12.0.0 (clang-1200.0.32.27)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 3333
3333
>>> _
3333
>>>

오.. 신기하다.


2. 값을 무시하고 싶을 때

# 언패킹시 특정값을 무시
>>> x, _, z = 10, 20, 30
>>> x
10
>>> _
20
>>> z
30
>>>


# 여러개의 값 무시
>>> a, *_, c = 10, 20, 30, 40, 50
>>> a
10
>>> _
[20, 30, 40]
>>> c
50
>>>


# 인덱스 무시
>>> for _ in range(10):
...     print('singihada')
...
singihada
singihada
singihada
singihada
singihada
singihada
singihada
singihada
singihada
singihada
>>>


# 특정 위치의 값 무시
for _, val in list_of_tuple:
    do_something()

# 이건 어떻게 활용할 수 있는지 모르겠다. 좀 더 찾아보겠습니다.

3. 변수나 함수명에 특별한 의미 또는 기능을 부여하고자 할 때

주로 한 모듈 내부에서만 사용하는 private 클래스/함수/변수/메서드를 선언할 때 사용한다. 로 선언하면 from module import * 에서 **** 로 시작하는 것들은 모두 임포트에서 무시된다.

하지만 Python 에서 진정한 의미의 private 를 지원하지 않고 있기 때문에, 불러오려고 하면 불러올 수 있다.

즉, _ 는 private, __ 는 맹글링인데 맹글링은 클래스간 속성명의 충돌을 방지하기 위한 용도로 사용된다 고 한다.

음.. 어렵다 어려워. 맹글링을 사용해볼 기회가 있으면 좋겠는데.

또한 더블 언더스코어(__) 를 사용한 변수나 메서드는 스페셜 메서드 또는 매직 메서드 라고 하는데, 어떤 특정한 문법적 기능을 제공하거나 특정한 일을 수행한다.

  • init (클래스의 인스턴스가 생성될 때 수행됨)
  • len (len() 메서드가 실행될 때 수행됨)
  • eq (equal 의 의미로 a == b 라는 식이 수행될 때 실행됨)
  • file (현재 파이썬 파일의 위치를 나타냄)

더블 언더스코어를 사용해서 모듈 내부에서 사용하는 private 메서드로 사용한다고 누구한테 말 한 기억이 있는데..

코딩도장 파이썬 다시 한 번 돌려야겠다..


4. 국제화 / 지역화 함수로써 사용할 때

5. 숫자 리터럴 값의 자릿수 구분을 위한 구분자로써 사용할 때


4번 5번은 넘어가자. 필요할 때 분명 다시 볼 날이 있겠지.

여지껏 private 의 명시적 용도로만 사용한다고 알고 있었는데, 다시 한 번 공부가 되었다. 자세한 내용을 보고 싶다면 아래 링크.. 꼭 들어가보도록. 정말 정리가 잘 되어 있습니다.

>> 파이썬 언더스코어데 대해서

profile
개발을 취미로 할 수 있는 그 때 까지
post-custom-banner

0개의 댓글