title: How to know function return type and argument types?
body: <p>While I am aware of the duck-typing concept of Python, I sometimes struggle with the type of arguments of functions, or the type of the return value of the function.</p>
  
  <p>Now, if I wrote the function myself, I DO know the types. But what if somebody wants to use and call my functions, how is he/she expected to know the types? 
  I usually put type information in the function's docstring (like: <code>"...the id argument should be an integer..."</code> and <code>"... the function will return a (string, [integer]) tuple."</code>)</p>
  
  <p>But is looking up the information in the docstring (and putting it there, as a coder) really the way it is supposed to be done? </p>
  
  <p><strong>Edit:</strong> While the majority of answers seem to direct towards "yes, document!" I feel this is not always very easy for 'complex' types.<br> For example: how to describe <em>concisely</em> in a docstring that a function returns a list of tuples, with each tuple of the form (node_id, node_name, uptime_minutes) and that the elements are respectively a string, string and integer?<br>
  The docstring PEP documentation doesn't give any guidelines on that.<br>
  I guess the counterargument will be that in that case classes should be used, but I find python very flexible because it allows passing around these things using lists and tuples, i.e. <em>without</em> classes.</p>