TLDR: idiomatyczny odpowiednik void
adnotacji typu zwracanego to -> None
.
def foo() -> None:
...
Ten odpowiada, że funkcja bez return
lub tylko gołe return
ma wartość None
.
def void_func():
pass
print(void())
Pominięcie zwracanego typu nie oznacza, że nie ma zwracanej wartości. Zgodnie z PEP 484 :
W przypadku funkcji zaznaczonej domyślną adnotacją dla argumentów i dla typu zwracanego jest Any
.
Oznacza to, że wartość jest uważana za wpisaną dynamicznie i statycznie obsługuje każdą operację . To jest praktycznie przeciwne znaczenie void
.
Podpowiedzi do typów w Pythonie nie wymagają ściśle określonych typów. Na przykład, adnotacje mogą używać ciągów nazw typu: Union[str, int]
, Union[str, 'int']
, 'Union[str, int]'
i różne warianty są równoważne.
Podobnie None
uważa się , że adnotacja typu oznacza „jest z NoneType
”. Można to wykorzystać nie tylko w przypadku typów zwracanych, chociaż zobaczysz to najczęściej:
bar : None
def foo(baz: None) -> None:
return None
Dotyczy to również typów ogólnych. Na przykład można użyć None
in, Generator[int, None, None]
aby wskazać, że generator nie przyjmuje ani nie zwraca wartości.
Mimo że PEP 484 sugeruje, że None
to oznacza type(None)
, nie należy jawnie używać tej drugiej formy. Specyfikacja podpowiedzi typu nie obejmuje żadnej formy type(...)
. Jest to technicznie wyrażenie środowiska uruchomieniowego, a jego obsługa zależy wyłącznie od sprawdzania typów. mypy
Projekt rozważa usunięcie wsparcia dla type(None)
i usunąć go z 484, jak również.
A może powinniśmy zaktualizować PEP 484, aby nie sugerował, że type(None)
jest ważny jako typ i None
jest jedyną poprawną pisownią? Powinien być jeden - a najlepiej tylko jeden - oczywisty sposób na zrobienie tego itp.
--- JukkaL, 18 maja 2018 r
void
typem zwracanym. Dowolna funkcja (lub gałąź funkcji) bez jawnościreturn
zwróciNone
. Zakładam, że OP rozumie, że ten komentarz jest głównie dla przyszłych czytelników ...