'underscore'에 해당하는 글 1건

_ underscore

Programming/Python 2020. 11. 16. 21:31

파이썬에서 언더스코어(_)의 기능은 조금 특별하다. 언패킹에서의 예제에서 홀로 쓰여있는 언더스코어를 보고 조금 더 검색해 봤는데, 함수나 변수에 언더스코어를 사용하여 private 처럼 설정이 가능하다는 것이 새롭다. 참고로 파이썬에서는 C++ 이나 JAVA 처럼 private/protected/public 등의 키워드를 사용하여 리소스 접근 제어를 완벽하게 지원하지 않지만 언더스코어를 사용하여 효과적으로 사용할 수 있다.



언더스코어(_)의 기능


1. 인터프리터에서 마지막 표현식의 값을 불러올 때


>>> 20 
20 
>>> _ + 3 
23
cs



2. 자리는 채워야 하지만 그 값을 무시해도 상관없을 때


# unpacking
x, _, y = (123)
 
# index
for _ in range(10):
    do_something()
 
for _, val in list_of_tuple:
    do_something()
cs



3. 변수나 함수 선언시 사용


파이썬에서 변수나 함수를 private 으로 지정하는 방법으로 언더스코어(_) 를 사용할 수 있다.

변수나 함수 선언시 이름 앞에 언더스코어(_)를 붙이면 private 로 지정되어, 모듈을 from import 할 때 private 변수나 함수들은 import 되지 않을 것이며, __all__ 에 지정되어 있으면 다른 모듈에서 직접 호출할 수 있다.


이름 앞에 싱글 언더스코어(_single_leading_underscore)

- 해당 변수나 함수를 가진 모듈을 from class_file import * 로 호출하면, import 때 무시되어 사용할 수 없다.

- 모듈 내부에서만 사용가능한 private 역할로 사용할 수 있지만, import 로 직접 호출하면 사용 가능하다.


이름 뒤에 싱글 언더스코어(single_trailing_underscore_) : protected

- 내장함수 및 예약어 등의 이름을 사용하고 싶을때 충돌을 방지하기 위해 사용한다.


이름 앞에 더블 언더스코어(__double_leading_underscore) : private

- 인터프리터에서 파싱할 때 그 이름을 그대로 사용하지 않고 내부 규칙에 의해 임의의 이름이 붙여짐(mangle).

- 파이썬에서의 맹글링은 _ClassName__method 가 된다.

- 기존 이름에 직접 접근할 수 없으므로, 주로 클래스 내부에서만 사용한다.


이름 앞뒤에 더블 언더스코어(__double_leading_and_trailing_underscore__)

- __init__ 같은 매직 메소드를 표현할 때 사용한다.

- 사용자 정의도 가능하지만 거의 사용하지 않는다.



4. 숫자 리터럴(Numeric Literals) 에서의 가독성


숫자를 구분하며 가독성을 높일 때(실제값에 영향을 주지 않음)


>>> 1_000_000_000_000_000
1000000000000000
 
>>> 0x_FF_FF_FF_FF
4294967295
cs



5. 국제화(i18n), 지역화(l10n)  함수에 사용


i18n/l10n 라이브러리인 gettext 와 웹프레임워크인 Django 의 공식 문서에서도 언더스코어(_)를 사용하고 있다.


import gettext
 
gettext.bindtextdomain('myapplication''/path/to/my/language/directory')
gettext.textdomain('myapplication')
= gettext.gettext
 
# ...
 
print(_('This is a translatable string.'))
cs


from django.utils.translation import ugettext as _
from django.http import HttpResponse
 
def translate_view(request):
    translated = _('This string will be translated.')
    return HttpResponse(translated)
cs




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,