python 밑줄의 다른 용법
단일 밑줄은 일반적으로 3가지 경우에 사용됩니다.
1. 해석 프로그램에서
_이름은 대화식 해석기 세션에서 마지막으로 실행된 문장의 결과를 가리킵니다.이것은 우선 표준 CPython 해석기에 의해 완성된 것이고 다른 해석기도 그 뒤를 따른다.
>>> _
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '_' is not defined
>>> 42
>>> _
42
>>> 'alright!' if _ else ':('
'alright!'
>>> _
'alright!'
2. 이름으로이것은 이전과 관련이 있습니다._일회용 명칭으로 사용하다.이것은 코드를 읽는 사람들에게 알리기 위해 여기에 어떤 이름을 분배했지만 사용할 생각은 없습니다.예를 들어, 순환 계수기의 실제 값에 관심이 없을 수도 있습니다.
n = 42
for _ in range(n):
do_something()
3.i18n저희가 볼 수 있어요_함수로 사용할 수도 있다.이런 상황에서 국제화와 현지화 문자열 변환 검색을 실행하는 함수의 이름을 사용합니다.이것은 C 언어의 관련 규칙에서 비롯된 것 같다.Django 문서에서 참조:
from django.http import HttpResponse
from django.utils.translation import gettext as _
def my_view(request):
output = _("Welcome to my site.")
return HttpResponse(output)
두 번째와 세 번째 사용법이 충돌할 수 있으므로 어떤 경우에도 _i18n으로 검색하고 번역하는 코드 블록에서는 _일회용으로 사용되는 이름입니다.2.이름 앞에 단일 밑줄 넣기(예: _total)
이름 앞의 단일 밑줄은 프로그래머가 이름을'사유'로 간주하도록 지정하는 데 사용됩니다.이것은 일종의 약속으로 간주할 수 있으며, 코드를 읽는 사람이 알기 쉽게_시작 이름은 내부에서 사용할 수 있습니다.Python 문서에서 설명한 바와 같이:
밑줄이 있는 이름(예: _spam)은 함수, 메서드, 데이터 구성원 등 API의 비공개 부분으로 간주되어야 합니다.그것은 만약 변경이 있으면 별도로 통지하지 않는 것을 용서하십시오.
*일종의 약속이라고 하는 것은 사실상 해석 프로그램에 어떤 의미가 있기 때문이다.만약 우리가 import*에서 모듈/패키지의 __를 제외하고는all__ 목록에 명시적으로 포함되어 있지 않으면 _로 가져오지 않습니다.시작 이름.
셋.이름 뒤에 있는 단일 밑줄 (예: total_)
이름 뒤에 있는 단일 밑줄은 이름이 다른 이름을 가리지 않도록 하는 데 사용되며, 당연히 관례입니다.예를 들어, 만약 어떤 형식을 명명하고 싶다면, 파이썬의 내장 형식을 덮지 않기 위해서, 포맷_이라고 명명할 수 있습니다.
사.숫자 글꼴의 단일 밑줄 (예: 100_000)
PEP 515 지수는 밑줄이 전체, 부동 점 및 복잡한 숫자 텍스트에서 숫자를 그룹화하는 시각적 구분자로 사용할 수 있도록 파이썬의 문법을 확장하는 것을 권장합니다. 이유는 다음과 같습니다.
이것은 다른 현대 언어의 흔한 특징으로 비교적 긴 문자나 텍스트의 가독성을 향상시킬 수 있으며 그 값은 바이트나 16진법 표현법의 단어와 같은 부분으로 명확하게 구분되어야 한다.
따라서 다음과 같은 작업을 수행할 수 있습니다.
#
amount = 10_000_000.0
#
addr = 0xCAFE_F00D
#
flags = 0b_0011_1111_0100_1110
# ,
flags = int('0b_1111_0000', 2)
5.이름 앞에 있는 이중 밑줄 (예: __total)이름 (특히 메소드 이름) 앞에 이중 밑줄 사용하기 (__)약속이 아니라 해석 프로그램에 특별한 의미가 있을 뿐이다.Python은 이름과 하위 클래스가 정의한 이름이 충돌하지 않도록 관리합니다.Python 문서에서 설명한 것처럼 어떤 형태로든 __spam의 식별자 (최소 두 개의 선행 밑줄 및 최대 한 개의 꼬리 밑줄) 는 텍스트에서 _classname__spam 교체, 그 중에서classname는 현재 클래스 이름이며, 선도 밑줄이 제거됩니다.
다음 예제를 예로 들 수 있습니다.
>>> class A(object):
... def _internal_use(self):
... pass
... def __method_name(self):
... pass
...
>>> dir(A())
['_A__method_name', ..., '_internal_use']
위에서 보듯이,_internal_use는 변하지 않지만 __method_name 변경됨_ClassName__method_name. 현재, 만약 당신이 A의 하위 클래스, 예를 들어 B(나쁜 이름)를 만들면, 당신은 쉽게 A를 덮어쓸 수 없을 것이다
>>> class B(A):
... def __method_name(self):
... pass
...
>>> dir(B())
['_A__method_name', '_B__method_name', ..., '_internal_use']
여기서 예기된 동작은 Java의 최종 방법과 C++의 일반 (비가상) 방법과 거의 같습니다.여섯.이름 앞과 뒤에 이중 밑줄 넣기(예: __init__)
이것들은 Python에서 사용하는 특수한 방법의 이름입니다.우리에게 있어서 이것은 단지 하나의 약정일 뿐이다. 즉, Python 시스템은 사용자가 정의한 이름과 충돌하지 않는 이름을 사용하는 방식이다.그리고 이 방법들을 덮어쓰고 Python에서 호출할 때 필요한 행동을 정의합니다.예를 들어, 클래스를 작성할 때 __init__다시 쓰는 방법.
우리가 자신의 특수한 방법 이름을 쓰는 것을 막을 수 있는 것은 아무것도 없다. (그러나 이렇게 하지 않는 것이 가장 좋다.)
>>> class C(object):
... def __mine__(self):
... pass
...
>>> dir(C)
... [..., '__mine__', ...]
가능한 한 이런 명칭 방식을 사용하지 말고, 파이썬이 정의한 특수 명칭이 이 약정을 따르도록 하면 된다.이상은python의 각종 밑줄의 작용에 대한 상세한 내용입니다.python 밑줄에 대한 더 많은 자료는 저희 다른 관련 문장에 주목하세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.