Search code examples
pythondictionarydocstring

Formatting python docstrings for dicts


What's the recommended way of adding a docstring for a dictionary parameter? I can see multiple line docstring examples here.

I need to document the input arguments to a function in the docstring. If it's a simple variable, I can use something like:

 def func2(a=x, b = y):
 """ fun2 takes two integers 

 Keyword arguments:
 a -- refers to age (default 18)
 b -- refers to experience (default 0)
 """

If we have dict passed as input argument to function:

 def func3(**kwargs):
     """ takes dictionary as input

      <Here how to explain them - Is it like?> 
      kwargs['key1'] -- takes value1

      <or simply>
      key1 -- takes value1
      """

Solution

  • I generally use the Google docstring style, so a dictionary parameter would look like:

    def func(a_dict):
        """Some function to do something to a dictionary.
    
        Args:
          a_dict (dict of str: int): Some mapping, I guess?
    
        """
        ...
    

    A function that takes **kwargs (note: this is not quite the same as having a dictionary parameter), would look like:

    def func(**kwargs):
        """Some function to do stuff to arbitrary keyword arguments.
    
        Args:
            **kwargs: Arbitrary keyword arguments.
    
        Keyword Args:
            <kwarg_name> int: A description
            <kwarg_name_2> str: Another description
            <...>
    
        """
        ...
    

    If there are specific parameters that should be present (e.g. your key1), they should be separate, not rolled into **kwargs.


    In Python 3.x, you can also use function annotations:

    def func(a_dict: dict):
        """Some function to do something to a dictionary."""
        ...
    

    From Python 3.5, you can be even more explicit using typing:

    from typing import Mapping
    
    def func(a_dict: Mapping[str, int]):
        """Some function to do something to a dictionary."""
        ...