변수 주석이란 무엇입니까?
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
'source' 카테고리의 다른 글
셸 스크립트에서 심볼릭 링크를 확인하는 방법 (0) | 2023.05.06 |
---|---|
빈 커밋을 원격으로 푸시하는 중 (0) | 2023.05.06 |
RegisterStartupScript와 RegisterClientScriptBlock의 차이점은 무엇입니까? (0) | 2023.05.01 |
Swift에서 명령줄 인수에 액세스하는 방법은 무엇입니까? (0) | 2023.05.01 |
해시 표시(#)를 사용하여 Git 커밋 메시지 시작 (0) | 2023.05.01 |