Каков предпочтительный способ прокомментировать код в Python? [Дубликат]

Я использовал это, чтобы выполнить что-то более полезное для сравнения двух строк:

def strings_iequal(first, second):
    try:
        return first.upper() == second.upper()
    except AttributeError:
        if not first:
            if not second:
                return True

Update : Как отмечено gerrit , это у ответа есть некоторые ошибки. Это было много лет назад, и я больше не помню, для чего я его использовал. Я действительно помню, как писал тесты, но насколько они хороши!

599
задан n611x007 7 February 2013 в 19:34
поделиться

8 ответов

Форматы

Докстоны Python могут быть записаны в нескольких форматах, как показали другие сообщения. Однако формат docstring по умолчанию Sphinx не упоминался и основан на reStructuredText (reST). Вы можете получить некоторую информацию о основных форматах в , что tuto .

Обратите внимание, что reST рекомендуется PEP 287

Далее следуют основные используемые форматы для docstrings.

- Epytext

Исторически был характерен стиль javadoc, поэтому он был взят за основу для Epydoc (с названием Epytext) для генерации документации.

Пример:

"""
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

В настоящее время, вероятно, более распространенным форматом является reStructuredText (reST), который используется Sphinx для создания документации. Примечание: он используется по умолчанию в JetBrains PyCharm (введите тройные кавычки после определения метода и нажмите enter). Он также используется по умолчанию в качестве выходного формата в файле Pyment.

Пример:

"""
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 имеет свой собственный формат , который часто используется. Это также может быть интерпретировано Сфинксом.

Пример:

"""
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.
"""

Даже больше примеров

- Numpydoc

Обратите внимание, что Numpy рекомендует следуйте своим собственным numpydoc на основе формата Google и можно использовать 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
"""

Преобразование / Генерация

Возможно использование инструмента, такого как Pyment , чтобы автоматически генерировать docstrings в проект Python, еще не задокументированный, или для преобразования существующих docstrings (может смешивать несколько форматов) из формата в другой.

Примечание. взятые из документации Pyment

634
ответ дан Mark Doliner 27 August 2018 в 05:17
поделиться

Официальные стили Python перечислены в PEP-8 .

3
ответ дан Amber 27 August 2018 в 05:17
поделиться

Руководство по стилю в стиле Google содержит отличное руководство по стилю Python. Он включает в себя соглашения для читаемого синтаксиса docstring , который предлагает лучшее руководство, чем PEP-257. Например:

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

Мне нравится расширять его, чтобы также включать информацию о типе в аргументы, как описано в этом учебнике документации Sphinx . Например:

def add_value(self, value):
    """Add a new value.

       Args:
           value (str): the value to add.
    """
    pass
296
ответ дан Anton Backer 27 August 2018 в 05:17
поделиться

PEP-8 является официальным стандартом кодирования питона. Он содержит раздел о docstrings, который ссылается на PEP-257 - полную спецификацию для docstrings.

12
ответ дан bstpierre 27 August 2018 в 05:17
поделиться

Это Python; все идет . Подумайте, как опубликовать свою документацию . Докстоны невидимы, за исключением читателей вашего исходного кода.

Люди действительно любят просматривать и искать документацию в Интернете. Для этого используйте инструмент документации Sphinx . Это де-факто стандарт для документирования проектов Python. Продукт прекрасен - посмотрите на https://python-guide.readthedocs.org/en/latest/ . На веб-сайте «Чтение документов» будут размещены ваши документы бесплатно.

3
ответ дан Colonel Panic 27 August 2018 в 05:17
поделиться

Я предлагаю использовать программу Python Владимира Келешева pep257 Python для проверки ваших docstrings против PEP-257 и Nump Docstring Standard для описания параметров, возвращает и т. д.

pep257 сообщит о дивергенции, которую вы делаете из стандарта, и называется как pylint и pep8.

3
ответ дан Finn Årup Nielsen 27 August 2018 в 05:17
поделиться

В качестве apparanty никто не упоминал об этом: вы также можете использовать стандарт Nump Docstring.

Наполеанское расширение сфинкса для разбора докстронгов в стиле Google (рекомендуется в ответ @Nathan) также поддерживает Docstring в стиле Numpy и делает короткое сравнение обоих.

И последний пример, чтобы дать представление о том, как это выглядит:

def func(arg1, arg2):
    """Summary line.

    Extended description of function.

    Parameters
    ----------
    arg1 : int
        Description of arg1
    arg2 : str
        Description of arg2

    Returns
    -------
    bool
        Description of return value

    See Also
    --------
    otherfunc : some related other function

    Examples
    --------
    These are written in doctest format, and should illustrate how to
    use the function.

    >>> a=[1,2,3]
    >>> print [x + 3 for x in a]
    [4, 5, 6]
    """
    return True
43
ответ дан joris 27 August 2018 в 05:17
поделиться

Соглашения docstring находятся в PEP-257 с гораздо большей детализацией, чем PEP-8.

Однако докстры, по-видимому, гораздо более личны, чем другие области кода. У разных проектов будет свой собственный стандарт.

Я склонен всегда включать docstrings, потому что они склонны демонстрировать, как использовать функцию и что она делает очень быстро.

Я предпочитаю сохранять согласованность, независимо от длины строки. Мне нравится, как выглядит код, когда отступы и интервалы согласованы. Это означает, что я использую:

def sq(n):
    """
    Return the square of n. 
    """
    return n * n

Over:

def sq(n):
    """Returns the square of n."""
    return n * n

И, как правило, не комментирует первую строку в более длинных docstrings:

def sq(n):
    """
    Return the square of n, accepting all numeric types:

    >>> sq(10)
    100

    >>> sq(10.434)
    108.86835599999999

    Raises a TypeError when input is invalid:

    >>> sq(4*'435')
    Traceback (most recent call last):
      ...
    TypeError: can't multiply sequence by non-int of type 'str'

    """
    return n*n

Значение Я нахожу docstrings, которые начинаются так, как будто это беспорядочно.

def sq(n):
    """Return the squared result. 
    ...
214
ответ дан kzh 27 August 2018 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: