指定されたタイプのリストを示唆するタイプ


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 14

@jonrsharpe type object is not subscriptable関数を定義するときにエラーが発生するはずです。明らかにあなたは文字列を使うことができます:def my_func(L: 'list[int]')しかし、PyCharmがdocstringsを解析するときにそれを解析するかどうかはわかりません...
Bakuriu

@Bakuriuはい、私は'list[int]'、それが明確でなければ謝罪しました。
jonrsharpe 14

PyCharmがdocstringのようにそれを解析するようには見えません。
エリックW.

回答:


161

私自身の質問に答えます。TLDRの答えは「いいえ です。

アップデート2

2015年9月、Python 3.5がリリースされ、タイプヒントがサポートされ、新しいタイピングモジュールが含まれています。これにより、コレクションに含まれるタイプを指定できます。2015年11月の時点で、JetBrains PyCharm 5.0はPython 3.5を完全にサポートしており、以下に示すようにタイプヒントが含まれています。

型ヒントを使用したPyCharm 5.0コード補完

アップデート1

2015年5月現在、PEP0484(タイプヒント)が正式に承認されています。ドラフト実装は、githubのambv / typehintingでも入手できます。

元の回答

2014年8月の時点で、Python 3型注釈を使用してコレクション内の型を指定することはできないことを確認しました(例:文字列のリスト)。

reStructuredTextやSphinxなどのフォーマットされたdocstringの使用は、実行可能な代替手段であり、さまざまなIDEでサポートされています。

また、Guidoはmypyの精神で型注釈を拡張するという考えを熟考しているようです:http ://mail.python.org/pipermail/python-ideas/2014-August/028618.html


更新:ジェネリック型のサポートを含めるための型のヒントがPEP484に到達
Eric W.

74

Python 3.5が正式にリリースされたので、Type Hintsサポートモジュールがtypingあり、関連するListリリースされたので、汎用コンテナに「タイプ」があります。

つまり、次のことができるようになります。

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のサポートにより、Python(おそらく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.