TLDR: l'equivalente idiomatico di void
un'annotazione di tipo restituito è -> None
.
def foo() -> None:
...
Questo corrisponde a quello di una funzione senza return
o solo un nudo return
restituisce None
.
def void_func(): # unannotated void function
pass
print(void()) # None
L'omissione del tipo restituito non significa che non sia presente alcun valore restituito. Secondo PEP 484 :
Per una funzione selezionata, l'annotazione predefinita per gli argomenti e per il tipo restituito è Any
.
Ciò significa che il valore è considerato tipizzato dinamicamente e supporta staticamente qualsiasi operazione . Questo è praticamente il significato opposto di void
.
I suggerimenti sui tipi in Python non richiedono strettamente i tipi effettivi. Ad esempio, le annotazioni possono utilizzare stringhe di nomi di tipo: Union[str, int]
, Union[str, 'int']
, 'Union[str, int]'
e diverse varianti sono equivalenti.
Allo stesso modo, l'annotazione di tipo None
è considerata significare "è di NoneType
". Questo può essere utilizzato non solo per i tipi di reso, anche se lo vedrai più spesso lì:
bar : None
def foo(baz: None) -> None:
return None
Questo vale anche per i tipi generici. Ad esempio, è possibile utilizzare None
in Generator[int, None, None]
per indicare che un generatore non accetta o restituisce valori.
Anche se PEP 484 suggerisce questo None
mezzo type(None)
, non dovresti usare la seconda forma esplicitamente. La specifica del suggerimento sul tipo non include alcuna forma di type(...)
. Questa è tecnicamente un'espressione di runtime e il suo supporto dipende interamente dal controllo del tipo. Il mypy
progetto sta considerando di rimuovere il supporto per type(None)
e rimuoverlo anche da 484.
O forse dovremmo aggiornare PEP 484 per non suggerire che type(None)
è valido come tipo, ed None
è l'unica ortografia corretta? Ci dovrebbe essere uno - e preferibilmente solo uno - modo ovvio per farlo ecc.
--- JukkaL, 18 maggio 2018
void
tipo restituito. Qualsiasi funzione (o ramo in una funzione) senza un esplicitoreturn
torneràNone
. Presumo che l'OP lo capisca, questo commento è principalmente a beneficio dei futuri lettori ...