Iterable
型ヒントを使用して、常に 2 つの値 ( abool
と a )を生成する を返す関数に注釈を付けるにはどうすればよいですかstr
? ヒントTuple[bool, str]
は近いですが、戻り値の型をジェネレーターや他の反復可能型ではなくタプルに制限する点が異なります。
foo()
私が最も興味を持っているのは、次のように複数の値を返すために使用される関数に注釈を付けたいからです。
always_a_bool, always_a_str = foo()
通常、関数はfoo()
次のような処理を実行しますreturn a, b
(タプルを返します) が、返されたタプルをジェネレーターやリスト、または他のものに置き換えるのに十分な柔軟性を備えた型ヒントがほしいと思います。
ベストアンサー1
常に1 つのオブジェクトを返します。 を使用するとreturn one, two
、単純にタプルが返されます。
はい、-> Tuple[bool, str]
完全に正しいです。
型によってのみ、それぞれが異なる型を持つ固定数Tuple
の要素を指定できます。関数が固定数の戻り値を生成する場合、特にそれらの値が特定の異なる型である場合は、常にタプルを返す必要があります。
他のシーケンス型は、可変数の要素に対して1つのtyping.Sequence
型指定を持つことが想定されるため、ここでは適していません。リストとタプルの違いは何ですか?
タプルは異種データ構造(つまり、エントリの意味が異なります)ですが、リストは同種のシーケンスです。タプルには構造があり、リストには順序があります。
Python の型ヒント システムはこの哲学に従っていますが、現在のところ、固定長で特定の位置に特定の型を含む反復可能オブジェクトを指定する構文はありません。
任意の反復可能オブジェクトを指定する必要がある場合、最善の方法は次のとおりです。
-> Iterable[Union[bool, str]]
その時点で、呼び出し元は、任意の順序で、長さが不明 (0 から無限大の間) のブール値と文字列を期待できます。
最後に、Python 3.9以降では、
-> tuple[bool, str]
;の代わりに-> Tuple[bool, str]
型ヒント表記のサポートほとんどの標準ライブラリコンテナタイプに追加されました(見るペップ585from __future__ import annotations
完全なリストについては、こちらをご覧ください。実際、モジュールのコンパイラ スイッチと構文をサポートする型チェッカーを使用すれば、Python 3.7 でもこれを使用できます。