TLDR: l'équivalent idiomatique d'une void
annotation de type de retour est -> None
.
def foo() -> None:
...
Cela correspond à ce qu'une fonction sans return
ou juste un simple return
évalue None
.
def void_func(): # unannotated void function
pass
print(void()) # None
Omettre le type de retour ne signifie pas qu'il n'y a pas de valeur de retour. Selon PEP 484 :
Pour une fonction cochée, l'annotation par défaut pour les arguments et pour le type de retour est Any
.
Cela signifie que la valeur est considérée comme typée dynamiquement et prend en charge statiquement toute opération . C'est pratiquement le sens opposé de void
.
L'indication de type en Python ne nécessite pas strictement de types réels. Par exemple, les annotations peuvent utiliser des chaînes de noms de type: Union[str, int]
, Union[str, 'int']
, 'Union[str, int]'
et diverses variantes sont équivalentes.
De même, l'annotation de type None
est considérée comme signifiant "est de NoneType
". Cela peut être utilisé non seulement pour les types de retour, même si vous le verrez le plus souvent là-bas:
bar : None
def foo(baz: None) -> None:
return None
Cela s'applique également aux types génériques. Par exemple, vous pouvez utiliser None
in Generator[int, None, None]
pour indiquer qu'un générateur ne prend ni ne renvoie de valeurs.
Même si PEP 484 suggère que cela None
signifie type(None)
, vous ne devez pas utiliser ce dernier formulaire explicitement. La spécification de type hinting ne pas inclure toute forme de type(...)
. Il s'agit techniquement d'une expression d'exécution, et sa prise en charge dépend entièrement du vérificateur de type. Le mypy
projet envisage de retirer le support pour type(None)
et le retirer de 484 ainsi.
Ou peut-être devrions-nous mettre à jour PEP 484 pour ne pas suggérer que ce type type(None)
est valide et None
que la seule orthographe est correcte? Il devrait y avoir une - et de préférence une seule - façon évidente de le faire, etc.
--- JukkaL, 18 mai 2018
void
type de retour. Toute fonction (ou branche dans une fonction) sans explicitereturn
retourneraNone
. Je suppose que l'OP comprend cela, ce commentaire est principalement destiné aux futurs lecteurs ...