Строки документации – одна строка против нескольких строк
-
29-10-2019 - |
Вопрос
добавляю немного (эпидок) документации к пакету, который я написал, и я сталкиваюсь с множеством случаев, когда повторяюсь множество раз.
def script_running(self, script):
"""Return if script is running
@param script: Script to check whether running
@return: B{True} if script is running, B{False} otherwise
@rtype: C{bool}
"""
PEP257 Говорит, что:
Однострочники предназначены для действительно очевидных случаев.
а также
Строка документации для функции или метода должна суммировать ее поведение и документировать ее аргументы, возвращаемые значения, побочные эффекты, возникающие исключения и ограничения на то, когда ее можно вызывать (все, если применимо).
Существует ли общее руководство или стандартная практика, когда следует проводить границу между однострочным (описанием) и полными полями параметров/возврата?
Или при создании документации я должен включать все применимые поля для каждой функции, независимо от того, насколько повторяющимися они кажутся?
Бонусный вопрос:Синтаксически, как лучше всего описать script
параметр?
Решение
Общее руководство, которое вы ищете, находится прямо в PEP257 в том, что вы процитировали, возможно, вам просто нужно увидеть это в действии.
Ваша функция является хорошим кандидатом на однострочную строку документации («действительно очевидные случаи»):
def script_running(self, script):
"""Check if the script is running."""
Обычно, если вы говорите, что функция что-то проверяет, это означает, что она собирается вернуть результат. True
или False
, но если хотите, можете быть более конкретным:
def script_running(self, script):
"""Return True if the script is running, False otherwise."""
Еще раз все в одну строку.
Я бы, наверное, еще поменял название вашей функции, потому что в ее названии (скрипте) нет необходимости подчеркивать, что именно функция делает.Имя функции должно быть приятным, коротким и информативным о том, что делает функция.Пожалуй, я выберу:
def check_running(self, script):
"""Return True if the script is running, False otherwise."""
Иногда имя-функции-воображение устал от всего программирования, но ты все равно должен стараться изо всех сил.
Для многострочного примера позвольте мне позаимствовать строку документации из рекомендации Google:
def fetch_bigtable_rows(big_table, keys, other_silly_variable=None):
"""Fetches rows from a Bigtable.
Retrieves rows pertaining to the given keys from the Table instance
represented by big_table. Silly things may happen if
other_silly_variable is not None.
Args:
big_table: An open Bigtable Table instance.
keys: A sequence of strings representing the key of each table row
to fetch.
other_silly_variable: Another optional variable, that has a much
longer name than the other args, and which does nothing.
Returns:
A dict mapping keys to the corresponding table row data
fetched. Each row is represented as a tuple of strings. For
example:
{'Serak': ('Rigel VII', 'Preparer'),
'Zim': ('Irk', 'Invader'),
'Lrrr': ('Omicron Persei 8', 'Emperor')}
If a key from the keys argument is missing from the dictionary,
then that row was not found in the table.
Raises:
IOError: An error occurred accessing the bigtable.Table object.
"""
Это может быть один из способов «подведите итоги его поведения и задокументируйте его аргументы, возвращаемые значения, побочные эффекты, возникающие исключения и ограничения на то, когда его можно вызывать (все, если применимо)».
Возможно, вам также будет интересно посмотреть на это пример проекта pypi что это должно быть задокументировано с помощью Сфинкс.
Мои 2 цента: Методические рекомендации призваны дать вам представление о том, что вам следует и не следует делать, но они это не строгие правила которому нужно слепо следовать.Итак, в конце выберите то, что вы считаете лучшим.
Я хотел бы прояснить кое-что, что было сказано в другом ответе о попадании в Максимальная длина линии со строкой документации.
ПЭП8 говорит тебе «Ограничить все строки максимум 79 символами» хотя в конце концов все делают 80.
Это 80 символов:
--------------------------------------------------------------------------------
И это может быть крайний случай, когда вам действительно нужно одно немного длинное предложение:
def my_long_doc_function(arg1, arg2):
"""This docstring is long, it's a little looonger than the 80 charachters
limit.
"""
Это похоже на однострочную строку документации, что означает, что для действительно очевидных случаев, но в вашем редакторе (с ограничением в 80 символов) он состоит из нескольких строк.
Другие советы
Я думаю, что при добавлении расширенного синтаксиса для строк документации, вероятно, всегда присутствует некоторая степень повторения, т.е.разметка epydoc/sphinx.
Я бы также сказал, что этот вопрос скорее субъективен, чем объективен.Явный вариант лучше неявного и, похоже, больше соответствует дзену Python.