Подробное руководство по применению docstring в языке программирования Python.
Введение
Docstring — это аннотация к вашему коду. Она может быть как в виде одной строки, так и многострочной.
Так же docstring используется для формирования справочных элементов в средах разработки.
Использование docstring в функциях
Рассмотрим на примере. У нас есть функция под названием «get_hypotenuse»:
from math import sqrt
def get_hypotenuse(a, b):
"""Return right triangle hypotenuse, given its other two sides."""
return sqrt(a**2 + b**2)
Запросим помощь по данной функции:
>>>> help(get_hypotenus)
Увидим следующее сообщение:
get_hypotenuse(a, b)
Return right triangle hypotenuse, given its other two sides.Именно так выглядит строка dosctring в справочной информации по указанной функции.
Расположение
Самый первый оператор в функции «get_hypotenuse» — это многострочная строка:
def get_hypotenuse(a, b):
"""Return right triangle hypotenuse, given its other two sides."""
return sqrt(a2 + b2)Я думаю, вы заметили, что эта строка каким-то образом отображается как документация.
Обратите внимание, что это не комментарий.
Комментарии в Python выглядят по-другому:
def get_hypotenuse(a, b):
# A commentБолее подробно ознакомиться с использованием комментариев можно в моей публикации.
Вернемся к docstring, перед нами многострочная строка, которую мы написали и она используется для документирования функции:
""" Return right triangle hypotenuse, given its other two sides. """
Эта строка называется docstring. Он действует как документация для этой функции, исходя от того, где она находится и что она из себя представляет.
Если я перемещу эту строку ниже нашего оператора return:
def get_hypotenuse(a, b):
return sqrt(a2 + b2)
"Return right triangle hypotenuse, given its other two sides."А потом я снова обращусь за помощью к нашей функции «get_hypotenuse»:
>>> help(get_hypotenuse)
Мы видим, что сейчас нет никакой документации для этой функции.
Строка документации должна быть самым первым оператором внутри функции. Она не может быть частью какого-то выражения. Например, строка документации не может быть оператором присваивания:
from math import sqrt
def get_hypotenuse(a, b):
z = """Return right triangle hypotenuse, given its other two sides."""
return sqrt(a2 + b2)Строка документации должна быть прописана отдельно и в самом начале функции.
Использование тройных кавычек
Что, если я возьму эту многострочную строку и удалю тройные кавычки, превратив ее в однострочную строку:
def get_hypotenuse(a, b):
"Return right triangle hypotenuse, given its other two sides."
return sqrt(a2 + b2)А если я сейчас попрошу помощи у функции «get_hypotenuse», я все равно увижу нашу строку документа?
>>> help(get_hypotenuse)
Мы её увидим!
get_hypotenuse(a, b)
Return right triangle hypotenuse, given its other two sides.Руководство по стилю
Очень часто можно увидеть тройные кавычки, используемые для строк документации, но использование тройных кавычек для строк документов — это просто условность. Это соглашение, которое продиктовано PEP 257.
PEP 257 говорит, что вы должны использовать тройные кавычки, чтобы их было легко превратить в многострочные строки.
Еще одна причина, по которой я предпочитаю использовать многострочные строки для docstring, заключается в том, что они выделяются немного больше: эти тройные кавычки бросаются мне в глаза.
PEP 257 также отмечает: чтобы начать свои строки с заглавной буквы, используйте императивное время (что означает «return», вместо «returns»).
Взгляните на PEP 257, если вы пытаетесь найти какую-то лучшую практику для написания собственных строк документов на Python.
Атрибут __doc__
Итак, если самый первый оператор в любой функции — это строка то это docstring. Python будет читать строки документации и отображать их всякий раз, когда вам понадобиться помощь по этой функции.
На самом деле, в Python существует аттрибут функции __doc__ который позволяет прочитать вашу строку документации:
>>> get_hypotenuse.__doc__ Return right triangle hypotenuse, given its other two sides.
Использование docstring в классах
Строки документации используются точно так же и в классах.
У нас есть класс под названием «Point»:
class Point:
"""A 3-dimensional point."""
def init(self, x, y, z):
self.x, self.y, self.z = x, y, zСамый первый оператор в классе «Point» — это строка.
Если я запрошу помощь по этому классу, то я увижу эту строку документа:
>>> help(Point) class Point(builtins.object) | Point(x, y, z) | | A 3-dimensional point. | | Methods defined here: | | __init__(self, x, y, z) | Initialize self. See help (type(self)) for accurate signature. |
Фактически, именно так работает функция HELP в целом.
Если вы обратитесь за помощью к объекту, Python будет искать строку документации этого объекта.
Использование docstring в модулях
Даже модули могут иметь строки документов.
У нас есть модуль под названием «hi.py», он начинается со строки:
"""Hi there!""" name = "Trey" x = 4
Если мы импортируем этот модуль «hi» и попросим о помощи по нему, то увидим строку docstring для этого модуля:
import hi
help(hi)
NAME
hi - Hi there!
DATA
name = 'Trey'
x = 4
FILE
/home/trey/hi.pyЗаключение
Теперь вы знаете, что, если самый первый оператор в функции, модуле или классе — это строка, независимо от того, является ли она многострочной строкой или нет, это строка docstring.
Эта строка документации будет прочитана Python, проанализирована Python и присоединена к объекту, чтобы действовать как документация для этого объекта.
Рекомендуется использовать docstring для документирования кода, а не комментирования. Комментарии игнорируются Python, а строки документов — нет.
И если видите строку docstring в коде, обратите внимание, что она имеет особое значение: не перемещайте ее ко второму оператору функции, потому что это ее сломает.
Храните свои строки документов в качестве первого оператора в ваших классах, модулях и функциях, чтобы Python мог их прочитать.





![[Решение] Как избежать ошибки UnboundLocalError](https://egorovegor.ru/wp-content/uploads/5b77c575d7-335x220.webp)



