pythonpython-sphinxsphinx-napoleon

Can Sphinx napoleon document function returning multiple arguments?


I am trying to use the Google code style to document a function that I then use sphinx with the napoleon extension to create documentation for. The function is unusual in that is returns two arguments. I don't think napoleon handles this. If so, could someone tell me how they handle it?

def foo(a):
'''one line summary

longer explanation

Args:
  a (int): parameter description

Returns:
  servers (list): list of servers to use
  msg (str): logging message string 
'''
pass

Maybe I'm getting a message that it is not great coding style to return multiple arguments, but can you do this? The html generated treats those two lines as part of a description for one argument. If I put a newline between the servers and msg line, it helps, but it is still documenting one arg.


Solution

  • Python only returns a single object. If you call

    serv,msg = foo(myinput)
    

    Then you are explicitly expanding the expression_list tuple which is generated when the function returns with this code

    return servers,msg
    

    You docstring should read some thing like this (with the Napoleon Google Style)

    """
    one line summary
    
    longer explanation
    
    Args:
        a (int): parameter description
    
    Returns:
        (tuple): tuple containing:
    
            servers(list) servers to use
            msg (str): logging message string 
    """
    

    Or with the Napoleon NumPy style:

    """
    one line summary
    
    longer explanation
    
    Parameters
    ----------
    a : int
        parameter description
    
    Returns
    -------
    servers : list
        servers to use
    msg : str
        logging message string 
    """
    

    Have a look at the python docs for return and perhaps expression_list