Я использовал это, чтобы выполнить что-то более полезное для сравнения двух строк:
def strings_iequal(first, second):
try:
return first.upper() == second.upper()
except AttributeError:
if not first:
if not second:
return True
Update : Как отмечено gerrit , это у ответа есть некоторые ошибки. Это было много лет назад, и я больше не помню, для чего я его использовал. Я действительно помню, как писал тесты, но насколько они хороши!
Докстоны Python могут быть записаны в нескольких форматах, как показали другие сообщения. Однако формат docstring по умолчанию Sphinx не упоминался и основан на reStructuredText (reST). Вы можете получить некоторую информацию о основных форматах в , что tuto .
Обратите внимание, что reST рекомендуется PEP 287
Далее следуют основные используемые форматы для docstrings.
Исторически был характерен стиль 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
"""
В настоящее время, вероятно, более распространенным форматом является 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 имеет свой собственный формат , который часто используется. Это также может быть интерпретировано Сфинксом.
Пример:
"""
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.
"""
Даже больше примеров
Обратите внимание, что 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
Руководство по стилю в стиле 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
PEP-8 является официальным стандартом кодирования питона. Он содержит раздел о docstrings, который ссылается на PEP-257 - полную спецификацию для docstrings.
Это Python; все идет . Подумайте, как опубликовать свою документацию . Докстоны невидимы, за исключением читателей вашего исходного кода.
Люди действительно любят просматривать и искать документацию в Интернете. Для этого используйте инструмент документации Sphinx . Это де-факто стандарт для документирования проектов Python. Продукт прекрасен - посмотрите на https://python-guide.readthedocs.org/en/latest/ . На веб-сайте «Чтение документов» будут размещены ваши документы бесплатно.
Я предлагаю использовать программу Python Владимира Келешева pep257 Python для проверки ваших docstrings против PEP-257 и Nump Docstring Standard для описания параметров, возвращает и т. д.
pep257 сообщит о дивергенции, которую вы делаете из стандарта, и называется как pylint и pep8.
В качестве 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
Соглашения 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.
...