Estou usando o sphinx e o plug-in autodoc para gerar documentação de API para meus módulos Python. Embora eu possa ver como documentar bem parâmetros específicos, não consigo encontrar um exemplo de como documentar um **kwargs
parâmetro.
Alguém tem um bom exemplo de uma maneira clara de documentar isso?
Respostas:
Eu acho que
subprocess
a documentação do -module é um bom exemplo. Forneça uma lista exaustiva de todos os parâmetros para uma classe principal / pai . Em seguida, basta consultar essa lista para todas as outras ocorrências de**kwargs
.fonte
subprocess.call(*popenargs, **kwargs)
. Está documentadosubprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
onde tudo o que*
vem depois de são as chaves reconhecidas em**kwargs
(ou pelo menos aquelas usadas com freqüência)subprocess.Popen
e não tenho mais certeza se é um exemplo particularmente bom.Depois de encontrar essa questão, resolvi o seguinte, que é o Sphinx válido e funciona muito bem:
O
r"""..."""
é necessário para tornar esta uma docstring "bruta" e, assim, manter a\*
intacta (para Sphinx entender como um literal*
e não como o início de "ênfase").A formatação escolhida (lista com marcadores com tipo entre parênteses e descrição separada por m-traços) é simplesmente para corresponder à formatação automatizada fornecida pelo Sphinx.
Depois de fazer o esforço de fazer a seção "Argumentos de palavra-chave" parecer a seção "Parâmetros" padrão, parece que será mais fácil rolar sua própria seção de parâmetros desde o início (de acordo com algumas das outras respostas) , mas como prova de conceito, essa é uma maneira de conseguir um visual legal para suplementar
**kwargs
se você já estiver usando o Sphinx.fonte
Documentos do Google Style analisados por Sphinx
Aviso: não testado.
A partir deste recorte do exemplo de docstring da esfinge , o
*args
e não**kwargs
são expandidos :Eu sugeriria a seguinte solução para compactação:
Observe como,
Optional
não é necessário para**key
argumentos.Caso contrário , você pode tentar listar explicitamente os * argumentos sob
Other Parameters
e**kwargs
sobKeyword Args
(consulte as seções analisadas ):fonte
Há um exemplo doctstring para Sphinx em sua documentação. Especificamente, eles mostram o seguinte:
Embora você tenha perguntado sobre esfingeexplicitamente, eu também apontaria para o Guia de estilo do Google Python . Seu exemplo de docstring parece implicar que eles não chamam kwargs especificamente. (other_silly_variable = None)
A ABB tem uma pergunta sobre a resposta aceita de fazer referência à documentação de gerenciamento de subprocesso. Se você importar um módulo, poderá ver rapidamente as docstrings do módulo por meio de inspect.getsource.
Um exemplo do interpretador python usando a recomendação do Silent Ghost:
É claro que você também pode visualizar a documentação do módulo por meio da função de ajuda. Por exemplo, ajuda (subprocesso)
Pessoalmente, não sou um fã do subprocesso docstring para kwargs como exemplo, mas como o exemplo do Google, ele não lista kwargs separadamente, conforme mostrado no exemplo de documentação do Sphinx.
Estou incluindo esta resposta à pergunta da ABB porque vale a pena observar que você pode revisar a fonte ou a documentação de qualquer módulo dessa forma para obter insights e inspiração para comentar seu código.
fonte
other_silly_variable
não é um argumento kwargs, mas completamente normal.Se alguém estiver procurando por alguma sintaxe válida .. Aqui está um exemplo de docstring. Foi assim que fiz, espero que seja útil para você, mas não posso afirmar que seja compatível com nada em particular.
fonte
Isso depende do estilo de documentação que você usa, mas se você estiver usando o estilo numpydoc , é recomendável documentar
**kwargs
usandoOther Parameters
.Por exemplo, seguindo o exemplo da Quornian:
Observe especialmente que é recomendado fornecer os padrões de kwargs, uma vez que eles não são óbvios pela assinatura da função.
fonte
Se você está procurando como fazer isso no estilo numpydoc , você pode simplesmente mencionar
**kwargs
na seção Parâmetros sem especificar o tipo - conforme demonstrado no exemplo numpydoc do guia de extensão napolean e docstring do pandas documentation sprint 2018.Aqui está um exemplo que encontrei no guia do desenvolvedor LSST que explica muito bem qual deve ser a descrição do
**kwargs
parâmetro:Como alternativa, com base no que @Jonas Adler sugeriu, acho melhor colocar o
**kwargs
e sua descrição naOther Parameters
seção - até mesmo este exemplo do guia de documentação matplotlib sugere o mesmo.fonte