In Python 3.x wird häufig die Annotation einer Funktion vom Rückgabetyp verwendet, z.
def foo() -> str:
return "bar"
Was ist die richtige Anmerkung für den Typ "void"?
Ich erwäge 3 Optionen:
def foo() -> None:
- nicht logische IMO, weil
None
kein Typ ist,
- nicht logische IMO, weil
def foo() -> type(None):
- mit der besten Syntax, die ich kenne, um zu erhalten
NoneType
,
- mit der besten Syntax, die ich kenne, um zu erhalten
def foo():
- Lassen Sie explizite Informationen zum Rückgabetyp weg.
Option 2. scheint mir am logischsten zu sein, aber ich habe bereits einige Instanzen von 1 gesehen.
python
annotations
void
type-hinting
Tregoreg
quelle
quelle
void
Rückgabetyp. Jede Funktion (oder Verzweigung in einer Funktion) ohne explizite Angabereturn
wird zurückgegebenNone
. IchAntworten:
Dies ist direkt aus der Dokumentation zu PEP 484 - Type Hints :
Und wie Sie sehen können, werden die meisten Beispiele
None
als Rückgabetyp verwendet.quelle
NoReturn
Typ "... verwendet, um Funktionen zu kommentieren, die niemals normal zurückkehren. Zum Beispiel eine Funktion, die bedingungslos eine Ausnahme auslöst ..."TLDR: Das idiomatische Äquivalent einer
void
Annotation vom Rückgabetyp ist-> None
.Dies entspricht, dass eine Funktion ohne
return
oder nur eine bloßereturn
Bewertung ergibtNone
.Das Weglassen des Rückgabetyps bedeutet nicht , dass kein Rückgabewert vorhanden ist. Gemäß PEP 484 :
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 werdenUnion[str, 'int']
,'Union[str, int]'
und verschiedene Varianten sind äquivalent.Ähnlich ist die Typanmerkung
None
gilt als verstanden „istNoneType
“. Dies kann nicht nur für Rückgabetypen verwendet werden, obwohl Sie es dort am häufigsten sehen werden:Dies gilt auch für generische Typen. Zum Beispiel können Sie verwenden ,
None
inGenerator[int, None, None]
sich einen Generator , um anzuzeigen , nicht nehmen oder Werte zurückgeben.Obwohl PEP 484 , die vorschlägt ,
None
Mitteltype(None)
, Sie sollten nicht die letztere Form explizit verwenden. Die Type Hinting - Spezifikation ist nicht jede Form dertype(...)
. Dies ist technisch gesehen ein Laufzeitausdruck, und seine Unterstützung liegt ganz bei der Typprüfung. Dasmypy
Projekt erwägt, die Unterstützung fürtype(None)
484 zu entfernen und diese ebenfalls zu entfernen.quelle