-
파이썬에서 _(Underscore) 의 사용법# = Study/S_ = Python 2021. 6. 6. 17:14
내가 쓴 코드에서는 __init__ 과 변수에 이름을 지을 때를 제외하고선 _ 를 찾아보기 힘들지만, 남(존잘러로 추정)이 짠 코드를 보게되면 _ 를 사용하는 모습이 종종 보인다. 이 갈증을 해결해보자
1. Use In Interpreter
시작부터 충격이다.
파이썬에서는 last expression 에 해당 하는 값을 _ 에 저장한다. 이를 위와 같이 다른 변수에 할당 할 수도 있다.
2. Ignoring Values
두 번째, 값을 무시하고 싶을 때 사용한다.
이 말이 무엇이냐면, Unpacking 동안 특정 변수를 사용하고 싶지 않을때 사용한다.
다시 말해, 특정 변수 값에 할당은 필요하지만 이 다음 코드에서 사용하지 않을 때 사용한다.
3. Use In Looping
list 를 iterating 할 때, looping 시 iterator 로 사용한다.
4. Separating Digits Of Numbers
1,000,000 과 같이 긴 숫자는 변수 할당시 ' , ' 를 사용 할 수 없기 때문에
1_000_000 과 같이 ' , ' 를 대체해서 _ 를 사용하여 가독성을 높이는데 사용한다.
million 이외에 binary octa hexa 등은 아직 모른다. ( 갈 길이 참 멀다. )
# todo: 추후에 찾아보고 업데이트
5. Naming Using Underscore(_)
사실 목적은 5번째 쓰임새였지만, 이외의 사용법 때문에 생각보다 시간이 오래걸렸다.
Underscore에 메인 쓰임새 !
- Single Pre Underscore:- _variable
- Signle Post Underscore:- variable_
- Double Pre Underscores:- __variable
- Double Pre and Post Underscores:- __variable__
5.1. _single_pre_underscore
single pre underscore 는 내부용으로만 사용된다.
이게 무슨 말이냐면,
위와 같이 underscore 를 사용해서 변수의 이름을 지어도 사용하는데는 크게 지장이 없다.
But,
위와 같이 모듈로서 사용할 때, 파이썬은 _로 시작하는 변수를 import 하지 않는다.
이를 피하기 위해서 애초에
from my_functions import * 를 대신해서 import my_functions를 사용하고
my_functions._private_func()를 사용하는 방법이 있긴하다.
5.2 single_postunderscore
경험한 적은 없지만 위와 같이 Python Keyword를 사용할 때 나는 에러를 피하기 위해서 사용된다.
여기서 잠깐,
Python Keyword가 뭔데 ..?
Python Keyword : 파이썬에 이미 예약되어 있는 문자열로서 (예약어라고도 함) 다른 용도로 사용하지 못하는 문자열을 뜻함.
5.3. Double Pre Underscore
파이썬에서 Double Pre Underscore 는 name mangling 시에 사용된다 !
여기서 name mangling 이란?
*name mangling : Python의 인터프리터에서 클래스 상속시 충돌하기 어려운 방식으로 변수 이름을 변경하는 것.
위의 코드와 결과값을 자세히 보면 Sample이라는 class에서 선언한 'a', '_b'는 결과값 하단에서 확인할 수 있지만 '__c'는 '_Sample__c'로 변경된 것을 확인할 수 있다.
이것이가 네임 뮁글링이다.
아래와 같이 Sample class를 상속받는 SecondClass를 만들어보자.
여기에서도 Sample class에서 그러했듯 동일하게 네임 뮁글링이 적용된다.
SecondClass에서는 네임 뮁글링으로 인해 _Sample__c였던 것이 _SecondClass__c로 변경되었다.
하지만, obj1에 있던 _Sample__c에 정상적으로 접근할 수 있다.
즉, 부모 클래스에서 이미 사용하고 있는 네이밍을 자식 클래스에서 동일한 네이밍을 overridden해서 사용한 것인데 정확하게 어느 클래스에서 상속받은 변수 인지 확인할 수 있게 된다.
위와 같은 네임 뮁글링은 클래스 내 변수든, 메소드든 동일하게 적용된다.
+ 아래와 같은 사용도 가능하다 !
SimpleClass 에 __name을 할당하지 않았지만 클래스 밖에서 선언한 "datacamp"가 출력된 것을 확인할 수 있다.
5.4. Double Pre And Post Underscores
Python을 하다보면 __init__과 같이 변수명의 시작과 끝에 Double Underscores가 사용된 메소드들을 종종 볼 수 있다.
이러한 메소드를 magic methods 또는 dunder methods
라고 부른다.
따라서 다른 메소드와의 충돌이 있을 수 있기 때문에 이러한 표기법으된 변수를 할당하는 것은 지양해야 한다.
그럼 magin methods 와 dunder methods는 무엇이냐
이는 방대한 내용이므로 다음 포스팅으로 대체하겠다.
출처
'# = Study > S_ = Python' 카테고리의 다른 글
파이썬 자료구조 (0) 2021.06.20