[python] 지정된 유형의 목록을 암시하는 유형

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를 완전히 지원합니다.

유형 힌트를 사용한 PyCharm 5.0 코드 완성

업데이트 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 지원 모듈 typingList일반 컨테이너에 대한 관련 “유형”이 있습니다.

즉, 이제 다음을 수행 할 수 있습니다.

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에서 나를 위해 일하고 있습니다.

Pycharm의 예제 그림


답변

BDFL의 지원으로 파이썬 (아마 3.5)이 함수 주석을 통해 유형 힌트에 대한 표준화 된 구문을 제공한다는 것이 거의 확실합니다.

https://www.python.org/dev/peps/pep-0484/

PEP에서 참조 된 것처럼 mypy라는 실험적인 유형 검사기 (pylint와 비슷하지만 유형용)가 이미이 표준을 사용하고 새로운 구문이 필요하지 않습니다.

http://mypy-lang.org/


답변

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


답변