1. ホーム
  2. python

[解決済み] タイプヒントを使用して複数の戻り値の型を指定する方法

2022-03-23 18:37:13

質問

Pythonの関数で bool または list . タイプヒントを使用して戻り値の型を指定する方法はありますか?

例えば、このような方法でよいのでしょうか?

def foo(id) -> list or bool:
    ...

解決方法は?

からの ドキュメント

クラス typing.Union

ユニオンタイプです。 Union[X, Y]はXかYのどちらかを意味します。

したがって、複数の戻り値のデータ型を表現する適切な方法は、次のとおりです。

from typing import Union


def foo(client_id: str) -> Union[list,bool]


しかし、型付けは強制されていないことに注意してください。 Pythonは動的型付け言語であることに変わりはありません。 アノテーション構文は、実運用にリリースされる前のコードの開発中に役立つように開発されました。 PEP 484にあるように、"実行時に型チェックは行われません。

>>> def foo(a:str) -> list:
...     return("Works")
... 
>>> foo(1)
'Works'

見ての通り、私はint値を渡してstrを返しています。しかし __annotations__ には、それぞれの値が設定されます。

>>> foo.__annotations__ 
{'return': <class 'list'>, 'a': <class 'str'>}


をご覧ください。 PEP 483 は、タイプヒントの詳細についてです。また Python 3.5の型ヒントは何ですか? ?

にのみ利用可能であることに注意してください。 Python 3.5 以上とします。に明確に記載されています。 PEP 484 .


Python 3.10 以降では、このユニオンを表現する新しい方法があります。以下を参照してください。 ユニオンタイプ :

ユニオンオブジェクトは、複数のタイプオブジェクトに対する|(ビット単位のor)演算の値を保持します。これらの型は、主に型注釈のために意図されています。ユニオン型表現は、typing.Unionと比較して、よりきれいな型ヒンティング構文を可能にします。

見ての通り、これはまさに typing.Union を以前のバージョンでは 先ほどの例も、この記法を使うように修正することができます。

def foo(client_id: str) -> list | bool: