web-dev-qa-db-ja.com

複数の戻り値の型に注釈を付ける方法は?

型ヒントを使用して、常に2つの値Iterableboolを生成するstrを返す関数に注釈を付けるにはどうすればよいですか?ヒント_Tuple[bool, str]_は近いです。ただし、戻り値の型をジェネレーターやその他の反復可能な型ではなく、タプルに制限しています。

このような複数の値を返すために使用される関数foo()に注釈を付けたいので、私は主に興味があります:

_always_a_bool, always_a_str = foo()
_

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

39
Richard Hansen

常にoneオブジェクトを返しています。 return one, twoを使用すると、単にタプルが返されます。

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

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

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

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

Pythonのタイプヒントシステムはその哲学に準拠しています。現在のところ、固定長の反復可能オブジェクトを指定し、特定の位置に特定のタイプを含む構文はありません。

mustiterableが行うことを指定する必要がある場合、できることは次のとおりです。

-> Iterable[Union[bool, str]]

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

49
Martijn Pieters