Python 3의 함수 주석을 사용하면 PyCharm 및 기타 IDE에서 유형 힌트를 목적으로 동종 목록 (또는 다른 컬렉션)에 포함 된 항목 유형을 지정할 수 있습니다.
int 목록에 대한 의사 Python 코드 예제 :
def my_func(l:list<int>):
pass
Docstring을 사용하는 것이 가능하다는 것을 알고 있습니다.
def my_func(l):
"""
:type l: list[int]
"""
pass
…하지만 가능하다면 주석 스타일을 선호합니다.
답변
내 질문에 답하기; TLDR 대답은 No Yes 입니다.
업데이트 2
2015 년 9 월에 Python 3.5는 Type Hints를 지원하며 새로운 타이핑 모듈을 포함하여 출시되었습니다 . 이를 통해 컬렉션에 포함 된 유형을 지정할 수 있습니다. 2015 년 11 월부터 JetBrains PyCharm 5.0은 아래 그림과 같이 유형 힌트를 포함하도록 Python 3.5를 완전히 지원합니다.
업데이트 1
2015 년 5 월부터 PEP0484 (유형 힌트) 가 공식적으로 승인되었습니다. 초안 구현은 ambv / typehinting 아래의 github 에서도 사용할 수 있습니다 .
원래 답변
2014 년 8 월부터 Python 3 유형 주석을 사용하여 컬렉션 내 유형 (예 : 문자열 목록)을 지정할 수 없음을 확인했습니다.
reStructuredText 또는 Sphinx와 같은 형식화 된 독 스트링의 사용은 실행 가능한 대안이며 다양한 IDE에서 지원됩니다.
또한 Guido는 mypy의 정신으로 유형 주석을 확장하는 아이디어를 고민하고있는 것으로 보입니다 : http://mail.python.org/pipermail/python-ideas/2014-August/028618.html
답변
이제 Python 3.5가 공식적으로 나왔으므로 Type Hints 지원 모듈 typing
과 List
일반 컨테이너에 대한 관련 “유형”이 있습니다.
즉, 이제 다음을 수행 할 수 있습니다.
from typing import List
def my_func(l: List[int]):
pass
답변
PEP 484 이후 유형 주석이 추가되었습니다.
from . import Monitor
from typing import List, Set, Tuple, Dict
active_monitors = [] # type: List[Monitor]
# or
active_monitors: List[Monitor] = []
# bonus
active_monitors: Set[Monitor] = set()
monitor_pair: Tuple[Monitor, Monitor] = (Monitor(), Monitor())
monitor_dict: Dict[str, Monitor] = {'codename': Monitor()}
# nested
monitor_pair_list: List[Dict[str, Monitor]] = [{'codename': Monitor()}]
이것은 현재 Python 3.6.4를 사용하는 PyCharm에서 나를 위해 일하고 있습니다.
답변
BDFL의 지원으로 파이썬 (아마 3.5)이 함수 주석을 통해 유형 힌트에 대한 표준화 된 구문을 제공한다는 것이 거의 확실합니다.
https://www.python.org/dev/peps/pep-0484/
PEP에서 참조 된 것처럼 mypy라는 실험적인 유형 검사기 (pylint와 비슷하지만 유형용)가 이미이 표준을 사용하고 새로운 구문이 필요하지 않습니다.
답변
Python 3.9부터 내장 유형은 유형 주석과 관련하여 일반적입니다 ( PEP 585 참조 ). 이를 통해 요소 유형을 직접 지정할 수 있습니다.
def my_func(l: list[int]):
pass
다양한 도구가 Python 3.9 이전의이 구문을 지원할 수 있습니다. 주석이 런타임에 검사되지 않으면 따옴표 또는를 사용하여 구문이 유효합니다 __future__.annotations
.
# quoted
def my_func(l: 'list[int]'):
pass
# postponed evaluation of annotation
from __future__ import annotations
def my_func(l: list[int]):
pass