What is the correct way to document a **kwargs parameter?

后端 未结 8 1000
清酒与你
清酒与你 2021-01-30 02:48

I\'m using sphinx and the autodoc plugin to generate API documentation for my Python modules. Whilst I can see how to nicely document specific parameters, I cannot find an exam

8条回答
  •  礼貌的吻别
    2021-01-30 03:39

    There is a doctstring example for Sphinx in their documentation. Specifically they show the following:

    def public_fn_with_googley_docstring(name, state=None):
    """This function does something.
    
    Args:
       name (str):  The name to use.
    
    Kwargs:
       state (bool): Current state to be in.
    
    Returns:
       int.  The return code::
    
          0 -- Success!
          1 -- No good.
          2 -- Try again.
    
    Raises:
       AttributeError, KeyError
    
    A really great idea.  A way you might use me is
    
    >>> print public_fn_with_googley_docstring(name='foo', state=None)
    0
    
    BTW, this always returns 0.  **NEVER** use with :class:`MyPublicClass`.
    
    """
    return 0
    

    Though you asked about sphinx explicitly, I would also point to the Google Python Style Guide. Their docstring example seems to imply that they don't call out kwargs specifically. (other_silly_variable=None)

    def fetch_bigtable_rows(big_table, keys, other_silly_variable=None):
    """Fetches rows from a Bigtable.
    
    Retrieves rows pertaining to the given keys from the Table instance
    represented by big_table.  Silly things may happen if
    other_silly_variable is not None.
    
    Args:
        big_table: An open Bigtable Table instance.
        keys: A sequence of strings representing the key of each table row
            to fetch.
        other_silly_variable: Another optional variable, that has a much
            longer name than the other args, and which does nothing.
    
    Returns:
        A dict mapping keys to the corresponding table row data
        fetched. Each row is represented as a tuple of strings. For
        example:
    
        {'Serak': ('Rigel VII', 'Preparer'),
         'Zim': ('Irk', 'Invader'),
         'Lrrr': ('Omicron Persei 8', 'Emperor')}
    
        If a key from the keys argument is missing from the dictionary,
        then that row was not found in the table.
    
    Raises:
        IOError: An error occurred accessing the bigtable.Table object.
    """
    pass
    

    A-B-B has a question about the accepted answer of referencing the subprocess management documentation. If you import a module, you can quickly see the module docstrings via inspect.getsource.

    An example from the python interpreter using Silent Ghost's recommendation:

    >>> import subprocess
    >>> import inspect
    >>> import print inspect.getsource(subprocess)
    

    Of course you can also view the module documentation via help function. For example help(subprocess)

    I'm not personally a fan of the subprocess docstring for kwargs as an example, but like the Google example it doesn't list kwargs seperately as shown in the Sphinx documentation example.

    def call(*popenargs, **kwargs):
    """Run command with arguments.  Wait for command to complete, then
    return the returncode attribute.
    
    The arguments are the same as for the Popen constructor.  Example:
    
    retcode = call(["ls", "-l"])
    """
    return Popen(*popenargs, **kwargs).wait()
    

    I'm including this answer to A-B-B's question because it's worth noting that you can review any module's source or documentation this way for insights and inspiration for commenting your code.

提交回复
热议问题