TLDR:void
戻り値型注釈の慣用的な同等物は-> None
です。
def foo() -> None:
...
これは、関数の評価結果がにreturn
等しいか、またはまったくない場合に一致return
しNone
ます。
def void_func(): # unannotated void function
pass
print(void()) # None
戻り値の型を省略しても、戻り値がないとは限りません。あたりとしてPEP 484:
チェック関数の場合、引数と戻り値の型のデフォルトの注釈はAny
です。
これは、値が動的に型付けされていると見なされ、静的に任意の操作をサポートすることを意味します。これは実際にはの反対の意味ですvoid
。
Pythonの型ヒントは、実際の型を厳密に必要としません。たとえば、注釈はタイプ名の文字列を使用することができUnion[str, int]
、Union[str, 'int']
、'Union[str, int]'
および様々な変異体が同等です。
同様に、型注釈None
は「is of 」を意味すると見なされNoneType
ます。これは、戻り値の型だけでなく、そこに最も頻繁に表示されますが、使用できます。
bar : None
def foo(baz: None) -> None:
return None
これはジェネリック型にも適用されます。たとえば、None
in Generator[int, None, None]
を使用して、ジェネレータが値を取得または返さないことを示すことができます。
PEP 484はをNone
意味するtype(None)
と示唆していますが、後者の形式を明示的に使用しないでください。タイプヒント指定には、の形式は含まれませんtype(...)
。これは技術的にはランタイム式であり、そのサポートは完全に型チェッカー次第です。mypy
プロジェクトがされてサポート削除する検討のためにtype(None)
、よくとして484から取り外します。
あるいは、それtype(None)
がタイプとして有効であることを示唆しないように、PEP 484を更新する必要があります。None
があり、唯一の正しいスペルである必要がありますか?それを行うための明白な方法は1つ(できれば1つだけ)あるはずです。
--- JukkaL、2018年5月18日
void
戻り値の型を持つ関数はありません。明示的でない関数(または関数の分岐)return
はを返しNone
ます。私はOPがそれを理解していると思います、このコメントは主に将来の読者の利益のためです...