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


128

Python 3의 함수 주석을 사용하면 PyCharm 및 기타 IDE에서 유형 힌트를 목적으로 동종 목록 (또는 다른 컬렉션)에 포함 된 항목 유형을 지정할 수 있습니다.

int 목록에 대한 의사 Python 코드 예제 :

def my_func(l:list<int>):
    pass

Docstring을 사용하는 것이 가능하다는 것을 알고 있습니다.

def my_func(l):
    """
    :type l: list[int]
    """
    pass

...하지만 가능하다면 주석 스타일을 선호합니다.


함수 주석에서 동일한 형식을 사용해 보셨습니까? 어떻게 된 거예요?
jonrsharpe

@jonrsharpe type object is not subscriptable함수를 정의 할 때 오류가 발생 합니다. 분명히 당신은 문자열을 사용할 수 def my_func(L: 'list[int]')있지만, 나는 그것이 문서화 문자열을 구문 분석으로 PyCharm은 ... 구문 분석할지 모른다
Bakuriu

@Bakuriu 그래, 나는 'list[int]'그것이 명확하지 않다면 사과했다.
jonrsharpe

PyCharm이 독 스트링처럼 파싱 할 것 같지는 않습니다.
Eric W.

답변:


161

내 질문에 답하기; 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


업데이트 : 제네릭 유형에 대한 지원을 포함하는 유형 힌트가 PEP484 python.org/dev/peps/pep-0484
Eric W.

74

이제 Python 3.5가 공식적으로 나왔으므로 Type Hints 지원 모듈 typingList일반 컨테이너에 대한 관련 "유형"이 있습니다.

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

from typing import List

def my_func(l: List[int]):
    pass

10

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의 예제 그림


4

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

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

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

http://mypy-lang.org/


3

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.