Co to jest standardowy format Python docstring? [zamknięte]
chcesz poprawić to pytanie? Zaktualizuj pytanie, aby mogło być odpowiedź z faktami i cytatami przez edytując ten post .
Zamknięte 3 lata temu .
Popraw to pytanieWidziałem kilka różnych stylów pisania docstrings w Pythonie, czy istnieje oficjalny lub" uzgodniony " styl?
7 answers
Formaty
Docstringi Pythona mogą być pisane w kilku formatach, jak pokazały inne posty. Jednak domyślny format docstring Sphinx nie został wymieniony i jest oparty na reStructuredText (reST) . Informacje o głównych formatach można znaleźć w w tym wpisie na blogu .
Zauważ, że reszta jest zalecana przez PEP 287
Poniżej znajdują się główne używane formaty docstrings.
- Epytext
Historycznie a javadocpodobnie jak styl był rozpowszechniony, więc został wzięty jako podstawa dla Epydoc (z formatem Epytext
) do generowania dokumentacji.
Przykład:
"""
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
"""
- reszta
Obecnie prawdopodobnie bardziej rozpowszechnionym formatem jest format reStructuredText (reST), który jest używany przez Sphinx do generowania dokumentacji. Uwaga: jest on używany domyślnie w JetBrains PyCharm(wpisz potrójne cudzysłowy po zdefiniowaniu metody i naciśnij enter). Jest również używany przez domyślnie jako format wyjściowy w Pyment.
Przykład:
"""
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 ma swój własny format , który jest często używany. Może być również interpretowany przez Sfinksa(tj. korzystanie z wtyczki ).
Przykład:
"""
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.
"""
Nawet więcej przykładów
- Numpydoc
Zauważ, że Numpy zalecają podążanie za własnym numpydoc opartym na formacie Google i używanym przez Sfinks.
"""
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
"""
Konwersja / Generowanie
Możliwe jest użycie narzędzia takiego jak Pyment do automatycznego generowania docstringów do projektu Pythona, który nie jest jeszcze udokumentowany, lub do konwersji istniejących docstringów (może być mieszanie kilku formatów) z formatu na inny.
Uwaga: przykłady pochodzą z dokumentacji Pyment
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-13 03:30:53
The Google style guide zawiera doskonały przewodnik po stylach Pythona. Zawiera konwencje dla czytelnej składni docstring , która oferuje lepsze wskazówki niż PEP-257. Na przykład:
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
Chciałbym rozszerzyć to również o informacje typu w argumentach, jak opisano w tym Sphinx documentation tutorial . Na przykład:
def add_value(self, value):
"""Add a new value.
Args:
value (str): the value to add.
"""
pass
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-28 17:48:08
Konwencje Docstring są wPEP-257 o wiele bardziej szczegółowe niż PEP-8.
Jednak docstringi wydają się być znacznie bardziej osobiste niż inne obszary kodu. Różne projekty będą miały swój własny standard.
Zazwyczaj zawsze dołączam docstringi, ponieważ mają one tendencję do pokazywania, jak korzystać z funkcji i co robi bardzo szybko.
Wolę zachować spójność, niezależnie od długości łańcucha. Lubię jak kodować wygląda gdy wcięcia i odstępy są spójne. Czyli używam:
def sq(n):
"""
Return the square of n.
"""
return n * n
Over:
def sq(n):
"""Returns the square of n."""
return n * n
I mają tendencję do pomijania komentowania pierwszej linijki w dłuższych docstringach:
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
To znaczy, że docstringi, które zaczynają się w ten sposób, są niechlujne.
def sq(n):
"""Return the squared result.
...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 16:25:05
Jak nikt o tym nie wspomniał: możesz również użyć numpy Docstring Standard. Jest szeroko stosowany w środowisku naukowym.
- specyfikacja formatu z numpy wraz z przykładem
- masz rozszerzenie sphinx do renderowania go: numpydoc
- i przykład jak pięknie może wyglądać renderowany docstring: http://docs.scipy.org/doc/numpy/reference/generated/numpy.mean.html
Napolean sphinx rozszerzenie do parse Google-style docstrings (zalecane w odpowiedzi na @Nathan) obsługuje również docstring w stylu Numpy i dokonuje krótkiego porównania obu.
I ostatni podstawowy przykład, aby dać pomysł, jak to wygląda:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-08 04:07:19
PEP-8 jest oficjalnym standardem kodowania Pythona. Zawiera sekcję dotyczącą docstringów, która odnosi się do PEP-257 -- kompletnej specyfikacji docstringów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-10 01:48:11
It ' s Python; anything goes . Zastanów się, jak opublikować swoją dokumentację . Docstringi są niewidoczne z wyjątkiem czytników Twojego kodu źródłowego.
Ludzie naprawdę lubią przeglądać i przeszukiwać dokumentację w Internecie. Aby to osiągnąć, użyj narzędzia dokumentacji Sphinx . To de facto standard dokumentowania projektów Pythona. Produkt jest piękny-zobacz https://python-guide.readthedocs.org/en/latest /. Strona przeczytaj Docs będzie hostować Twoje dokumenty za darmo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-31 10:13:16
Proponuję użyć programu Vladimira Kelesheva pep257 Python, aby sprawdzić Twoje docstringi pod kątem PEP-257 i standardu Numpy Docstring do opisywania parametrów, zwrotów itp.
Pep257 zgłosi rozbieżność od standardu i nazywa się tak jak pylint i pep8.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-11 15:34:24