178 votes

Comment connaître le type de retour d'une fonction et les types d'arguments ?

Bien que je connaisse le concept de typage de Python, j'ai parfois du mal à déterminer le type des arguments des fonctions ou le type de la valeur de retour de la fonction.

Maintenant, si j'ai écrit la fonction moi-même, je connais les types. Mais si quelqu'un veut utiliser et appeler mes fonctions, comment est-il censé connaître les types ? J'ai l'habitude de mettre des informations sur les types dans la docstring de la fonction (comme : "...the id argument should be an integer..." y "... the function will return a (string, [integer]) tuple." )

Mais est-ce que chercher l'information dans la docstring (et la mettre là, en tant que codeur) est vraiment la façon dont cela doit être fait ?

Editer : Alors que la majorité des réponses semblent s'orienter vers "oui, document !", je pense que ce n'est pas toujours le cas. j'ai l'impression que ce n'est pas toujours très facile pour les types "complexes".
Par exemple : comment décrire de manière concise dans une docstring qu'une fonction renvoie une liste de tuples, chaque tuple étant de la forme (node_id, node_name, uptime_minutes) et que les éléments sont respectivement une chaîne de caractères, une chaîne de caractères et un nombre entier ?
La documentation PEP docstring ne donne aucune indication à ce sujet.
Je suppose que le contre-argument sera que dans ce cas les classes devraient être utilisées, mais je trouve python très flexible parce qu'il permet de passer ces choses en utilisant des listes et des tuples, c.-à-d. sans classes.

5voto

Maciej Ziarko Points 3236

Oui, vous devez utiliser les docstrings pour rendre vos classes et fonctions plus conviviales pour les autres programmeurs :

Plus d'informations : http://www.python.org/dev/peps/pep-0257/#what-is-a-docstring

Certains éditeurs permettent de voir les chaînes de documents tout en tapant, ce qui facilite vraiment le travail.

1voto

thomson_matt Points 3447

Oui, c'est le cas.

En Python, une fonction ne doit pas toujours renvoyer une variable du même type (même si votre code sera plus lisible si vos fonctions renvoient toujours le même type). Cela signifie que vous ne pouvez pas spécifier un seul type de retour pour la fonction.

De même, les paramètres ne doivent pas toujours être du même type.

0voto

Alois Cochard Points 4846

Oui, puisque c'est un langage à typage dynamique ;)

Lisez ceci à titre de référence : PEP 257

0voto

Steven Points 10243

Docstrings (et documentation en général). Python 3 introduit des annotations de fonctions (optionnelles), comme décrit dans PEP 3107 (mais n'oubliez pas les chaînes de caractères)

0voto

S.Lott Points 207588

Par exemple : comment décrire de manière concise dans une docstring qu'une fonction renvoie une liste de tuples, chaque tuple étant de la forme (node_id, node_name, uptime_minutes) et les éléments étant respectivement une chaîne de caractères, une chaîne de caractères et un nombre entier ?

Il n'existe pas de description "concise" de cette question. Elle est complexe. Vous l'avez conçu pour qu'il soit complexe. Et cela nécessite une documentation complexe dans le docstring.

Désolé, mais la complexité est bien complexe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X