TLDR: Das idiomatische Äquivalent einer voidAnnotation vom Rückgabetyp ist -> None.
def foo() -> None:
...
Dies entspricht, dass eine Funktion ohne returnoder nur eine bloße returnBewertung 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 Nonegilt 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 , Nonein Generator[int, None, None]sich einen Generator , um anzuzeigen , nicht nehmen oder Werte zurückgeben.
Obwohl PEP 484 , die vorschlägt , NoneMittel 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 mypyProjekt 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 Nonedie einzig richtige Schreibweise ist? Es sollte einen - und vorzugsweise nur einen - offensichtlichen Weg geben, dies zu tun usw.
--- JukkaL, 18. Mai 2018
voidRückgabetyp. Jede Funktion (oder Verzweigung in einer Funktion) ohne explizite Angabereturnwird zurückgegebenNone. Ich