Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the most common Python docstring formats? [closed]

I have seen a few different styles of writing docstrings in Python, what are the most popular styles?

like image 425
Noah McIlraith Avatar asked Oct 10 '10 01:10

Noah McIlraith


People also ask

What are the docstring in Python?

A Python docstring is a string used to document a Python module, class, function or method, so programmers can understand what it does without having to read the details of the implementation. Also, it is a common practice to generate online (html) documentation automatically from docstrings.

What does __ doc __ mean in Python?

The __doc__ attribute Each Python object (functions, classes, variables,...) provides (if programmer has filled it) a short documentation which describes its features. You can access it with commands like print myobject.


2 Answers

The Google style guide contains an excellent Python style guide. It includes conventions for readable docstring syntax that offers better guidance than PEP-257. For example:

def square_root(n):     """Calculate the square root of a number.      Args:         n: the number to get the square root of.     Returns:         the square root of n.     Raises:         TypeError: if n is not a number.         ValueError: if n is negative.      """     pass 

I like to extend this to also include type information in the arguments, as described in this Sphinx documentation tutorial. For example:

def add_value(self, value):     """Add a new value.         Args:            value (str): the value to add.     """     pass 
like image 44
Nathan Avatar answered Oct 02 '22 06:10

Nathan


Formats

Python docstrings can be written following several formats as the other posts showed. However the default Sphinx docstring format was not mentioned and is based on reStructuredText (reST). You can get some information about the main formats in this blog post.

Note that the reST is recommended by the PEP 287

There follows the main used formats for docstrings.

- Epytext

Historically a javadoc like style was prevalent, so it was taken as a base for Epydoc (with the called Epytext format) to generate documentation.

Example:

""" This is a javadoc style.  @param param1: this is a first param @param param2: this is a second param @return: this is a description of what is returned @raise keyError: raises an exception """ 

- reST

Nowadays, the probably more prevalent format is the reStructuredText (reST) format that is used by Sphinx to generate documentation. Note: it is used by default in JetBrains PyCharm (type triple quotes after defining a method and hit enter). It is also used by default as output format in Pyment.

Example:

""" This is a reST style.  :param param1: this is a first param :param param2: this is a second param :returns: this is a description of what is returned :raises keyError: raises an exception """ 

- Google

Google has their own format that is often used. It also can be interpreted by Sphinx (ie. using Napoleon plugin).

Example:

""" This is an example of Google style.  Args:     param1: This is the first param.     param2: This is a second param.  Returns:     This is a description of what is returned.  Raises:     KeyError: Raises an exception. """ 

Even more examples

- Numpydoc

Note that Numpy recommend to follow their own numpydoc based on Google format and usable by Sphinx.

""" My numpydoc description of a kind of very exhautive numpydoc format docstring.  Parameters ---------- first : array_like     the 1st param name `first` second :     the 2nd param third : {'value', 'other'}, optional     the 3rd param, by default 'value'  Returns ------- string     a value in a string  Raises ------ KeyError     when a key error OtherError     when an other error """ 

Converting/Generating

It is possible to use a tool like Pyment to automatically generate docstrings to a Python project not yet documented, or to convert existing docstrings (can be mixing several formats) from a format to an other one.

Note: The examples are taken from the Pyment documentation

like image 180
daouzli Avatar answered Oct 02 '22 06:10

daouzli