J'ai une fonction dans python qui peut renvoyer un bool
ou un list
. Est-il possible de spécifier les types de retour à l'aide d'indicateurs de type?.
Par exemple, est-ce la bonne façon de le faire?
def foo(id) -> list or bool:
...
De la documentation
classe
typing.Union
Type d'union; Union [X, Y] signifie soit X, soit Y.
Par conséquent, la manière appropriée de représenter plusieurs types de données de retour est la suivante:
from typing import Union
def foo(client_id: str) -> Union[list,bool]
Mais notez que la frappe n'est pas imposée. Python reste un langage à typage dynamique. La syntaxe d'annotation a été développée pour aider au développement du code avant sa publication en production. Comme l'indique PEP 484, "aucune vérification de type n'a lieu au moment de l'exécution".
>>> def foo(a:str) -> list:
... return("Works")
...
>>> foo(1)
'Works'
Comme vous pouvez le voir, je passe une valeur int et retourne une str. Cependant, le __annotations__
sera réglé sur les valeurs respectives.
>>> foo.__annotations__
{'return': <class 'list'>, 'a': <class 'str'>}
Passez par PEP 48 pour plus d'informations sur les indicateurs de type. Voir également Que sont les indications de type dans Python 3.5 ?
Veuillez noter que ceci est disponible uniquement pour Python 3.5 et supérieur. Ceci est clairement mentionné dans PEP 484 .
L’instruction def foo(client_id: str) -> list or bool:
lorsqu’elle est évaluée est équivalente à def foo(client_id: str) -> list:
et ne fera donc pas ce que vous voulez.
La manière native de décrire un indice de type "soit A, soit B" est nion (grâce à Bhargav Rao):
def foo(client_id: str) -> Union[list, bool]:
Je ne veux pas être le type "Pourquoi voulez-vous faire cela quand même", mais peut-être qu'avoir 2 types de retour n'est pas ce que vous voulez:
Si vous souhaitez renvoyer un booléen pour indiquer un type de cas d'erreur spécial, envisagez plutôt d'utiliser Exceptions. Si vous voulez renvoyer une valeur booléenne à une valeur spéciale, une liste vide serait peut-être une bonne représentation. Vous pouvez également indiquer que None
pourrait être renvoyé avec Optional[list]