TLDR: Das idiomatische Äquivalent einer void
Annotation vom Rückgabetyp ist -> None
.
def foo() -> None:
...
Dies entspricht, dass eine Funktion ohne return
oder nur eine bloße return
Bewertung ergibt None
.
def void_func(): # unannotated void function
pass
print(void()) # None
Das Weglassen des Rückgabetyps bedeutet nicht , dass kein Rückgabewert vorhanden ist. Gemäß PEP 484 :
Für eine aktivierte Funktion lautet die Standardanmerkung für Argumente und für den Rückgabetyp Any
.
Dies bedeutet, dass der Wert als dynamisch typisiert betrachtet wird und jede Operation statisch unterstützt . Das ist praktisch die entgegengesetzte Bedeutung von void
.
Typhinweise in Python erfordern nicht unbedingt tatsächliche Typen. Beispielsweise können für Anmerkungen Zeichenfolgen mit Typnamen : Union[str, int]
, verwendet werden Union[str, 'int']
, 'Union[str, int]'
und verschiedene Varianten sind äquivalent.
Ähnlich ist die Typanmerkung None
gilt als verstanden „ist NoneType
“. Dies kann nicht nur für Rückgabetypen verwendet werden, obwohl Sie es dort am häufigsten sehen werden:
bar : None
def foo(baz: None) -> None:
return None
Dies gilt auch für generische Typen. Zum Beispiel können Sie verwenden , None
in Generator[int, None, None]
sich einen Generator , um anzuzeigen , nicht nehmen oder Werte zurückgeben.
Obwohl PEP 484 , die vorschlägt , None
Mittel type(None)
, Sie sollten nicht die letztere Form explizit verwenden. Die Type Hinting - Spezifikation ist nicht jede Form der type(...)
. Dies ist technisch gesehen ein Laufzeitausdruck, und seine Unterstützung liegt ganz bei der Typprüfung. Das mypy
Projekt erwägt, die Unterstützung für type(None)
484 zu entfernen und diese ebenfalls zu entfernen.
Oder sollten wir PEP 484 aktualisieren, um nicht vorzuschlagen, dass dies type(None)
als Typ gültig ist und None
die einzig richtige Schreibweise ist? Es sollte einen - und vorzugsweise nur einen - offensichtlichen Weg geben, dies zu tun usw.
--- JukkaL, 18. Mai 2018
void
Rückgabetyp. Jede Funktion (oder Verzweigung in einer Funktion) ohne explizite Angabereturn
wird zurückgegebenNone
. Ich