Pythonでa bool
またはを返すことができる関数がありますlist
。型ヒントを使用して戻り値の型を指定する方法はありますか?
たとえば、これは正しい方法ですか?
def foo(id) -> list or bool:
...
Pythonでa 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で明確に述べられています。
def foo(client_id: str) -> list or bool:
評価されたときのステートメントは同等で
def foo(client_id: str) -> list:
あり、したがって、期待どおりに動作しません。
「AまたはB」タイプのヒントを表すネイティブな方法は、Unionです(Bhargav Raoに感謝):
def foo(client_id: str) -> Union[list, bool]:
私は「なぜとにかくこれをしたいのか」という人にはなりたくありませんが、おそらく2つの戻り値の型を持つことは、あなたが望むものではありません。
あるタイプの特殊なエラーケースを示すブール値を返したい場合は、代わりに例外を使用することを検討してください。特別な値としてブール値を返したい場合、おそらく空のリストが適切な表現になります。None
で返すことができることを示すこともできますOptional[list]
「複数の戻り値の型を指定する方法」を探して誰かがここに上陸した場合は、 Tuple[type_value1, ..., type_valueN]
from typing import Tuple
def f() -> Tuple[dict, str]:
a = {1: 2}
b = "hello"
return a, b