233

タイプ ヒントを使用して、常に aと aIterableの 2 つの値を返す an を返す関数に注釈を付けるにはどうすればよいですか? ヒントは近いですが、戻り値の型をジェネレーターやその他の型の iterable ではなく、タプルに制限する点が異なります。boolstrTuple[bool, str]

foo()次のように複数の値を返すために使用される関数に注釈を付けたいので、私はほとんど興味があります。

always_a_bool, always_a_str = foo()

通常、次のような関数foo()return a, b(タプルを返す) のようなことを行いますが、返されたタプルをジェネレーターやリストなどに置き換えるのに十分なほど柔軟な型ヒントが必要です。

4

1 に答える 1

313

常に1 つのオブジェクトを返します。usingreturn one, twoは単にタプルを返します。

はい、-> Tuple[bool, str]完全に正しいです。

タイプだけが、それぞれが異なるタイプを持つ固定数Tupleの要素を指定できます。関数が固定数の戻り値を生成する場合、特にそれらの値が特定の異なる型である場合は、常にタプルを返す必要があります。

他のシーケンス型は、可変数の要素に対して1 つのtyping.Sequence型指定を持つことが期待されるため、ここでは適していません。リストとタプルの違いも参照してください。

タプルは異種のデータ構造 (つまり、エントリの意味が異なる) ですが、リストは同種のシーケンスです。タプルには構造があり、リストには順序があります。

Python の型ヒント システムはその哲学に従っており、現在、固定長の iterable を指定し、特定の位置に特定の型を含む構文はありません。

どのイテラブルでも動作することを指定する必要がある場合、できる最善の方法は次のとおりです。

-> Iterable[Union[bool, str]]

この時点で、呼び出し元はブール値と文字列を任意の順序で、未知の長さ (0 から無限大の間の任意の場所) で期待できます。

最後になりましたが、Python 3.9 の時点で、次を使用できます。

-> tuple[bool, str]

の代わりに-> Tuple[bool, str]; 型ヒント表記のサポートが、ほとんどの標準ライブラリ コンテナー型に追加されました(完全なリストについては、PEP 585を参照してください)。from __future__ import annotations実際、モジュールにコンパイラ スイッチを使用し、構文をサポートする型チェッカーを使用する場合は、Python 3.7 の時点でもこれを使用できます。

于 2016-10-21T16:23:58.487 に答える