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 48 をご覧ください。 Python 3.5のタイプヒントとは ?も参照してください。
これはPython 3.5以降でのみ利用可能です。これは PEP 484 で明確に言及されています。
ステートメントdef foo(client_id: str) -> list or bool:
は、評価されたときにdef foo(client_id: str) -> list:
と同等であるため、必要な処理を行いません。
「AまたはBのいずれか」タイプのヒントを記述するネイティブな方法は、 nion (Bhargav Raoに感謝)です。
def foo(client_id: str) -> Union[list, bool]:
「とにかくこれをやりたいのはなぜですか」という男にはなりたくありませんが、2つの戻り値の型を持つことは望みではありません。
何らかの特殊なエラーケースを示すブール値を返したい場合は、代わりに例外の使用を検討してください。 boolを特別な値として返したい場合は、空のリストが適切な表現である可能性があります。 None
がOptional[list]
で返されることを示すこともできます