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

| | | | | | | | | | | | | | |

Bien que je sois conscient du concept de typage canard de Python, j'ai parfois du mal avec le type d'arguments des fonctions, ou le type de la valeur de retour de la fonction.

Maintenant, si j'écrivais la fonction moi-même, je connais les types. Mais que se passe-t-il si quelqu'un veut utiliser et appeler mes fonctions, comment est-il censé connaître les types ? Je mets généralement des informations de type dans la docstring de la fonction (comme : "... l'argument id doit être un entier..." et "... la fonction renverra un ( string, [integer]) tuple.")

Mais est-ce que rechercher les informations dans la docstring (et les mettre là, en tant que codeur) est vraiment comme il est censé être fait ?

Modifier : Bien que la majorité des réponses semblent orienter vers "oui, documentez !", je pense que ce n'est pas toujours très facile pour les types "complexes".
Par exemple : comment décrire concisement dans une docstring qu'une fonction renvoie une liste de tuples, avec chaque tuple de la forme (node_id, node_name, uptime_minutes) et que les éléments sont respectivement une chaîne, une chaîne et un entier ?
La documentation docstring PEP ne donne aucune directive à ce sujet.
Je suppose que le contre-argument sera que dans ce cas, les classes doivent être utilisées, mais je trouve python très flexible car il permet de faire passer ces choses en utilisant des listes et tuples, c'est-à-dire sans cours.