Qual é a maneira correta de comentar funções no Python?


174

Existe uma maneira geralmente aceita de comentar funções no Python? O seguinte é aceitável?

#########################################################
# Create a new user
#########################################################
def add(self):

Respostas:


318

A maneira correta de fazer isso é fornecer uma sequência de caracteres. Dessa forma, help(add)também cuspirá seu comentário.

def add(self):
    """Create a new user.
    Line 2 of comment...
    And so on... 
    """

São três aspas duplas para abrir o comentário e outras três aspas duplas para finalizá-lo. Você também pode usar qualquer string Python válida. Não precisa ser multilinha e as aspas duplas podem ser substituídas por aspas simples.

Ver: PEP 257


10
Observe que não precisa ser citado três vezes; qualquer literal de string funcionará. Mas você pode colocar mais informações em uma sequência multilinha.
Ignacio Vazquez-Abrams

5
Embora a convenção dite que deve ser citada três vezes. Eu nunca vi uma doutrina que não fosse.
Chinmay Kanchi

2
O que não quer dizer que não concordo. Eles devem ser citados três vezes, mas você verá alguns que não o são.
Jcdyer #

7
Você também pode usar três aspas simples (em vez de três aspas duplas) para abrir e fechar a sequência de caracteres.
Craig McQueen

você não deveria recuar o comentário também?
21134 joctee

25

Use uma sequência de caracteres, como outros já escreveram.

Você pode até dar um passo adiante e adicionar um teste de documento à sua cadeia de documentos, facilitando o teste automatizado de suas funções.


3
Essa resposta é bastante fraca sem seguir até a página vinculada.
Xaxxon

18

Use uma docstring :

Uma literal de cadeia de caracteres que ocorre como a primeira instrução em uma definição de módulo, função, classe ou método. Essa doutrina se torna o __doc__atributo especial desse objeto.

Todos os módulos normalmente devem ter docstrings, e todas as funções e classes exportadas por um módulo também devem ter docstrings. Métodos públicos (incluindo o __init__construtor) também devem ter documentos. Um pacote pode ser documentado na documentação do módulo do __init__.pyarquivo no diretório do pacote.

Literais de string que ocorrem em outras partes do código Python também podem atuar como documentação. Eles não são reconhecidos pelo compilador de bytecode do Python e não podem ser acessados ​​como atributos de objeto de tempo de execução (por exemplo, não atribuídos a __doc__), mas dois tipos de documentos extras podem ser extraídos pelas ferramentas de software:

  1. Os literais de cadeia de caracteres que ocorrem imediatamente após uma atribuição simples no nível superior de um módulo, classe ou __init__método são chamados de "documentação de atributos".
  2. Os literais de sequência que ocorrem imediatamente após outra sequência de caracteres são chamados de "colunas adicionais".

Consulte PEP 258 , "Docutils Design Specification" [2] , para obter uma descrição detalhada do atributo e de outros documentos ...


10

Os princípios de bons comentários são bastante subjetivos, mas aqui estão algumas diretrizes:

  • Os comentários da função devem descrever a intenção de uma função, não a implementação
  • Descreva quaisquer suposições que sua função faça com relação ao estado do sistema. Se ele usa variáveis ​​globais (tsk, tsk), liste-as.
  • Cuidado com o excesso de arte ASCII . Ter longas sequências de hashes pode parecer facilitar a leitura dos comentários, mas pode ser irritante para lidar quando os comentários mudam
  • Aproveite os recursos de linguagem que fornecem 'documentação automática', ou seja, docstrings em Python, POD em Perl e Javadoc em Java

7
não há nada subjetivo nisso, o Python é muito claro sobre o uso de comentários da Docstring.

@ pirulito distorcido, eu aprecio o comentário, mas você notará que o meu último ponto faz esse ponto exato. Talvez a pergunta do OP seja apenas sobre a mecânica de comentar em Python, mas acho que minha resposta não merece votação
Dancrumb

7

Leia sobre o uso de docstrings no seu código Python.

De acordo com as convenções de documentação do Python :

A documentação de uma função ou método deve resumir seu comportamento e documentar seus argumentos, valor (es) de retorno, efeitos colaterais, exceções levantadas e restrições sobre quando ela pode ser chamada (todas, se aplicável). Argumentos opcionais devem ser indicados. Deve ser documentado se os argumentos da palavra-chave fazem parte da interface.

Não haverá regra de ouro, mas forneça comentários que signifiquem algo para os outros desenvolvedores da sua equipe (se você tiver uma) ou mesmo para si mesmo quando voltar a ela seis meses depois.


5

Eu recomendaria uma prática de documentação que se integre a uma ferramenta de documentação como o Sphinx .

O primeiro passo é usar um docstring:

def add(self):
 """ Method which adds stuff
 """

2

Eu daria um passo além do que apenas dizer "use um docstring". Escolha uma ferramenta de geração de documentação, como pydoc ou epydoc (eu uso o epydoc no pyparsing) e use a sintaxe de marcação reconhecida por essa ferramenta. Execute essa ferramenta frequentemente enquanto estiver desenvolvendo, para identificar falhas na documentação. De fato, você pode até se beneficiar escrevendo as instruções para os membros de uma classe antes de implementá-la.


2

Use documentos .

Esta é a convenção sugerida interna no PyCharm para comentários de descrição de função:

def test_function(p1, p2, p3):
    """
    my function does blah blah blah

    :param p1: 
    :param p2: 
    :param p3: 
    :return: 
    """

Isso não deveria ser recuado (após a linha com def)? (Não é uma pergunta retórica.)
Peter Mortensen

0

Embora eu concorde que isso não deva ser um comentário, mas uma doutrina, como sugerem a maioria das respostas (todas?), Desejo adicionar numpydoc (um guia de estilo de doutrina ) .

Se você fizer assim, poderá (1) gerar automaticamente a documentação e (2) as pessoas reconhecerem isso e terão mais facilidade para ler seu código.


0

Você pode usar três aspas para fazer isso.

Você pode usar aspas simples:

def myfunction(para1,para2):
  '''
  The stuff inside the function
  '''

Ou aspas duplas:

def myfunction(para1,para2):
  """
  The stuff inside the function
  """
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.