Как узнать тип возвращаемого значения функции и типы аргументов?

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

Несмотря на то, что я знаком с концепцией утиного набора Python, у меня иногда возникают проблемы с типом аргументов функций или типом возвращаемого значения функции.

Теперь, если бы я написал сам функцию, я знаю типы. Но что, если кто-то захочет использовать и вызывать мои функции, откуда он/она должен знать типы? Обычно я помещаю информацию о типе в строку документации функции (например: "... аргумент id должен быть целым числом..." и "... функция вернет ( string, [integer]) tuple.")

Но действительно ли поиск информации в docstring (и помещение ее туда, как программист) должен выполняться так, как это должно быть сделано?

Редактировать: Хотя большинство ответов, кажется, направлены на "да, документ!", я чувствую, что это не всегда очень просто для "сложных" типов.
Например. : как описать сжато в строке документации, что функция возвращает список кортежей, где каждый кортеж имеет форму (node_id, node_name, uptime_minutes) и что элементы являются соответственно строкой, строкой и целым числом?
Документация по PEP не дает никаких указаний по этому поводу.
Думаю, контраргумент будет заключаться в том, что в этом случае следует использовать классы, но я нахожу python очень гибким, поскольку он позволяет обходить эти вещи с помощью списков и кортежи, т.е. без занятий.