source

변수 주석이란 무엇입니까?

manycodes 2023. 5. 1. 21:35
반응형

변수 주석이란 무엇입니까?

Python 3.6은 곧 출시될 예정입니다.PEP 494 -- Python 3.6 릴리스 일정에 12월 말이 언급되어 있으므로 Python 3.6의 새로운 기능을 검토하여 변수 주석이 언급되는 것을 확인했습니다.

PEP 484는 함수 매개변수의 유형 주석, 즉 유형 힌트에 대한 표준을 도입했습니다.이 PEP는 클래스 변수와 인스턴스 변수를 포함한 변수 유형에 주석을 달 수 있는 구문을 Python에 추가합니다.

primes: List[int] = []

captain: str  # Note: no initial value!

class Starship:
     stats: Dict[str, int] = {}

인 Python에 합니다.__annotations__클래스 또는 모듈의.언어의 와 "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""를 통해 타사 도구 및 에 대한 구조화된 할 수 있는 입니다.__annotations__기여하다.

그래서 제가 읽은 바로는 Python 3.5에서 제공되는 유형 힌트의 일부이며, Python 3.5의 유형 힌트란 무엇인가에 설명되어 있습니다.

나는 다음을 따릅니다.captain: str그리고.class Starship예를 들어, 하지만 마지막 것에 대해서는 확신할 수 없습니다.안녕하십니까?primes: List[int] = []설명해 주시겠습니까?정수만 허용하는 빈 목록을 정의하는 것입니까?

변수 주석이란 무엇입니까?

은 변수주다단불계다니과의 다음 입니다.# type, 정된대에서 된 바와 같이 PEP 484이 변경의 근거는 PEP 526의 섹션에 강조되어 있습니다.

따라서 유형을 암시하는 대신 다음을 사용합니다.

primes = []  # type: List[int]

형식 할당을 통해 형식에 직접 주석을 달 수 있도록 새로운 구문이 도입되었습니다.

primes: List[int] = []

@Martijn이 지적했듯이 에서 사용할 수 있는 유형을 사용하고 빈 목록으로 초기화하여 정수 목록을 나타냅니다.

어떤 변화를 가져올까요?

도입된 첫 번째 변경 사항은 이름에 유형을 주석으로 달 수 있는 새로운 구문입니다.:문자 또는 선택적으로 주석을 달면서 값을 할당할 수 있습니다.

annotated_assignment_stmt ::=  augtarget ":" expression ["=" expression]

문제의 예는 다음과 같습니다.

   primes: List[int] = [ ]
#    ^        ^         ^
#  augtarget  |         |
#         expression    |
#                  expression (optionally initialize to empty list)

구문과 사항도 되었습니다. " " " " "라는 이름이 붙었습니다. 모듈과 클래스는 이제__annotations__유형 메타데이터가 첨부되는 속성(PEP 3107 이후 함수가 가지고 있던 것처럼 -- 함수 주석):

from typing import get_type_hints  # grabs __annotations__

지금이다__main__.__annotations__선언된 유형을 보유합니다.

>>> from typing import List, get_type_hints
>>> primes: List[int] = []
>>> captain: str
>>> import __main__
>>> get_type_hints(__main__)
{'primes': typing.List<~T>[int]}

captain다음과 같은 이유로 현재 표시되지 않습니다.get_type_hints모듈에서도 액세스할 수 있는 유형만 반환합니다. 즉, 먼저 값이 필요합니다.

>>> captain = "Picard"
>>> get_type_hints(__main__)
{'primes': typing.List<~T>[int], 'captain': <class 'str'>}

용사를 합니다.print(__annotations__)보여줄 것입니다'captain': <class 'str'>하지만 당신은 정말로 접속해서는 안 됩니다.__annotations__직접적으로.

마찬가지로 클래스의 경우:

>>> get_type_hints(Starship)
ChainMap({'stats': typing.Dict<~KT, ~VT>[str, int]}, {})

있는 곳ChainMap는 클래스 번째 의 클래스의 기본 데 됩니다.mro 매핑, (으)로 표시됨,{}목적).

새 구문과 함께 클래스 변수를 나타내는 새 유형이 추가되었습니다.네.stats예제에서는 실제로 인스턴스 변수이지, 인스턴스 변수가 아닙니다.ClassVar.

어쩔 수 없이 사용해야 하나요?

힌와 같이트의 유형 .PEP 484이것들은 완전히 선택적이며 유형 검사 도구(및 이 정보를 기반으로 작성할 수 있는 다른 도구)에 주로 사용됩니다.안정적인 버전의 Python 3.6이 출시될 때 임시로 제공되므로 향후 작은 수정 사항이 추가될 수 있습니다.

사이의 모든 것.: 리고그고.=힌트이기 에 유형힌다니입트다니▁is.primes은 실제로는 로정다됩 니의다니▁is▁indeed.List[int]처음에는 빈 목록으로 설정됩니다(그리고stats는 처음에되었으며, 처에는빈사, 다과같정다니의로 정의되었습니다.Dict[str, int]).

List[int]그리고.Dict[str, int]다음 구문의 일부는 아니지만 Python 3.5 타이핑 힌트 PEP에 이미 정의되어 있습니다.3.6 PEP 526 변수 주석대한 구문 제안은 변수에 동일한 힌트를 첨부하는 구문만 정의합니다. 이전에는 주석이 있는 변수에만 유형 힌트를 첨부할 수 있었습니다(예:primes = [] # List[int]).

둘다요.List그리고.Dict일반 유형으로, 특정(구체적인) 내용이 포함된 목록 또는 사전 매핑이 있음을 나타냅니다.

위해서List'단'의(▁▁the가▁elements다▁('▁there있the'의 요소)는입니다.[...]구문), 목록에 있는 모든 요소의 유형입니다.위해서Dict첫 번째 인수는 키 유형이고 두 번째 인수는 값 유형입니다.따라서 모든 값은primes목록은 정수이며, 의 모든 키-값 쌍stats은 사전입니다.(str, int)정수로 매핑합니다.

정의의 제네릭 섹션과 PEP 483 유형 힌트 이론을 참조하십시오.

함수에 대한 유형 힌트와 마찬가지로, 함수의 사용은 선택 사항이며 주석으로 간주됩니다(모듈의 전역 및 클래스의 속성이 있지만 함수의 로컬은 아님).__annotations__주석에 할 수 .이러한 주석에 임의 정보를 첨부할 수 있으며 유형 힌트 정보에 엄격하게 제한되지 않습니다.

전체 제안서를 읽고 싶을 수도 있습니다. 새 구문 위와 그 이상의 일부 추가 기능이 포함되어 있습니다. 예를 들어, 이러한 주석이 평가되는 시기, 주석을 검사하는 방법, 클래스 속성 대 인스턴스 속성으로 선언하는 방법을 지정합니다.

언급URL : https://stackoverflow.com/questions/39971929/what-are-variable-annotations

반응형