web-dev-qa-db-ja.com

リスト/タプル/などを使用します。型から直接型をリスト/タプル/などとして参照する

ListモジュールからTupletypingなどを使用することの違いは何ですか:

from typing import Tuple

def f(points: Tuple):
    return map(do_stuff, points)

Pythonの型を直接参照するのとは対照的に:

def f(points: Tuple):
    return map(do_stuff, points)

そして、いつ一方を使用する必要がありますか?

25
Markus Meskanen

typing.Tupleおよびtyping.List are 汎用タイプ ;これは、contentsのタイプを指定できることを意味します。

def f(points: Tuple[float, float]):
    return map(do_stuff, points)

これは、渡されるTupleに2つのfloat値が含まれている必要があることを指定します。組み込みのTupleタイプではこれを行えません。

typing.Tuple は、特定の要素数と各位置のタイプを指定できるという点で特別です。長さが設定されておらず、タイプを繰り返す必要がある場合は、省略記号を使用します:Tuple[float, ...]は、可変長のTuplefloatsを記述します。

にとって - typing.List およびその他のシーケンスタイプは通常、すべての要素のタイプのみを指定します。 List[str]は、任意のサイズの文字列のリストです。関数は優先的に typing.Sequence は引数として、typing.Listは通常、戻り型にのみ使用されます。一般的に、ほとんどの関数は任意のシーケンスを取り、反復するだけですが、listを返すと、特定の可変シーケンスタイプが実際に返されます。

現在コンテンツを制限していない場合でも、常にtypingジェネリックを選択する必要があります。結果の変更が小さくなるので、後でジェネリック型を使用してその制約を追加する方が簡単です。

52
Martijn Pieters