Por que o Python não tem comentários de várias linhas?

252

OK, estou ciente de que cadeias de aspas triplas podem servir como comentários de várias linhas. Por exemplo,

"""Hello, I am a 
   multiline comment"""

e

'''Hello, I am a 
   multiline comment'''

Mas tecnicamente falando, essas são seqüências de caracteres, correto?

Pesquisei no Google e li o guia de estilo do Python, mas não consegui encontrar uma resposta técnica para o motivo de não haver uma implementação formal de multilinha, / * * / tipo de comentários. Não tenho problema em usar aspas triplas, mas estou um pouco curioso sobre o que levou a essa decisão de design.

CoolGravatar
fonte
8
Se você pode fazer isso como uma string, por que adicionar mais maneiras?
Brody
12
Só queria acrescentar que isso falhará se o que você está tentando comentar também tiver comentários / cadeias de linhas múltiplas. E é claro que é por isso que precisamos deles.
Nycynik
50
@ S.Lott Eu acho que é uma pergunta útil. Para entender por que o Python é bom, é importante entender as decisões de design que foram tomadas (e as decisões em andamento que ainda estão sendo tomadas). A questão não é argumentativa ou combativa; é curioso. Não precisa ser tão duro com a curiosidade.
Mark E. Haase
6
Se você precisar de uma linha de comentário de multi para o bacalhau apenas if False:o código
AturSams
5
@Brody Porque as strings são processadas. Comentários são ignorados. Há problemas com o uso de strings como comentários. Basta dar uma olhada :)
ADTC

Respostas:

266

Duvido que você obtenha uma resposta melhor do que "Guido não sentiu a necessidade de comentários em várias linhas".

Guido twittou sobre isso:

Dica do Python: você pode usar cadeias de linhas múltiplas como comentários de várias linhas. A menos que usado como docstrings, eles não geram código! :-)

Ned Batchelder
fonte
28
Veja o tweet de Guido sobre isso.
quer
15
Uma desvantagem da mistura de várias linhas e comentários de bloco é que o IDE não tem idéia do que você deseja, portanto, não pode mostrar comentários em estilos diferentes, conforme necessário.
Baiyan Huang 17/09/12
21
Também torna impossível comentar o código com seqüências de várias linhas (e pode levar a erros de indentação se você não for cuidadoso). Ai credo!
Mike Graham
3
Trabalhei em vários campos em que, se o seu código contiver um código comentado, ele será rejeitado e você poderá até ser convidado a atualizar seu currículo. Remova o código que não é necessário, não é um problema se o código estiver sob controle de versão ou use if False:antes do código que precisa ser desabilitado.
Steve Barnes
4
@SteveBarnes concorda que grandes blocos de código comentado na produção são ruins. Mas não entendo por que if Falseé melhor. Ele realiza exatamente a mesma coisa, embora seja menos claro (já que não é tão óbvio à primeira vista que o bloco de código foi desativado).
59

Comentários de várias linhas são facilmente quebráveis. E se você tiver o seguinte em um programa de calculadora simples?

operation = ''
print("Pick an operation:  +-*/")
# Get user input here

Tente comentar isso com um comentário de várias linhas:

/*
operation = ''
print("Pick an operation:  +-*/")
# Get user input here
*/

Ops, sua string contém o delimitador de comentário final.

Steve Losh
fonte
174
O melhor dessa resposta é como ela é tratada pelo marcador de sintaxe da SO.
Nietzche-jou
73
Essa é uma das muitas razões pelas quais temos caracteres de escape. Não vejo isso como um bom motivo para NÃO ter suporte para comentários de várias linhas.
Natalie Adams
34
Não entendo sua lógica - talvez meu comentário não tenha sido suficientemente claro. Se usamos \ como um caractere de escape: print ("Escolha uma operação: + - * \ /") "* /" não indica mais um bloco de comentário final, pois literalmente / será impresso. Vá em frente e teste isso em C ++. De fato, o marcador de sintaxe do SO mostrará que é válido. Este não é um assunto complexo, existe há anos em outros idiomas. Pedimos que você atualize sua postagem para incluir o uso de caracteres de escape para mostrar que você PODE usar "* /" em seu código.
Natalie Adams
23
e se o seu código contiver '' '. oops seu código contém o comentário final delimitador
siamii
21
Comentários de várias linhas não são inerentemente quebráveis; é que a maioria das implementações são (incluindo Python). A maneira óbvia de fazer comentários de várias linhas no Python, na minha opinião, é apenas permitir que eu comece um bloco de comentários #:e use o recuo para mostrar quando o comentário terminou. É limpo, consistente e lida perfeitamente com o aninhamento.
GatesDA
34

O texto com aspas triplas NÃO deve ser considerado comentários de várias linhas; por convenção, eles são doutrinas . Eles devem descrever o que seu código faz e como usá-lo, mas não para coisas como comentar blocos de código.

De acordo com Guido, os comentários multilinhas no Python são apenas comentários de linha única contíguos (procure por "comentários em bloco").

Para comentar blocos de código, às vezes uso o seguinte padrão:

if False:
    # A bunch of code
Tríptico
fonte
6
Parece que Guido mudou sua mente desde então.
Petr Viktorin
5
com relação à solução "if false:", o fato é que, em python, como funciona com guias, você teria que tabular todo o código na seção "if False:". E desabotoe o pedaço depois. Então você teria que ser bem bacana com o seu editor de texto.
Barlop #
3
se você usar um editor decente, deve ser a mesma quantidade de tempo que * /
AturSams 11/15/15
@barlop yup - aprenda seus editores! Este é normalmente realizáveis em menos de um segundo no vim comV}>>
Tríptico
30

Provavelmente, isso remonta ao conceito central de que deveria haver uma maneira óbvia de executar uma tarefa. Estilos de comentários adicionais adicionam complicações desnecessárias e podem diminuir a legibilidade.

Jarred McCaffrey
fonte
8
Essa é a questão, acredito: o uso de uma string como comentário não é óbvio e viola o princípio "uma maneira de fazer uma tarefa", uma vez que existem duas maneiras de fazer comentários: strings e #.
GatesDA
1
Mas não é significativamente diferente do que você tem em idiomas baseados em C: / * vs //, então não vejo como é significativamente pior.
Ben Roberts
//, considere por que alguém iria querer um comentário com várias linhas. Boas razões: ... Eu realmente não consigo pensar em nada além "Eu não preciso digitar tantas dessas # doohickeys" e "Eu preciso exibir esse comentário em particular de uma maneira muito precisa, e essa maneira precisa não permitir # # anterior ". Digamos que alguém queira fazer um diagrama ASCII ou coloque algum código javascript de referência para ser copiado e colado se surgir um problema específico. A única maneira óbvia de executar uma tarefa, aqui, não cobre os casos extremos dessa tarefa. Concordo, porém, que estilos de comentários adicionais são MAUS.
Nathan Basanese
3
"Não tenho que digitar tantas dessas # doohickeys". É exatamente por isso que praticamente todos os idiomas têm comentários em bloco (/ * .. * /). Acredite ou não, mas eu gosto de documentar o que meu código faz: as entradas, as saídas, os algoritmos utilizados, os parâmetros ... Isso é muito texto que também é modificado. A restrição a apenas comentários de linha única é simplesmente ridícula. Observe que NÃO advogo a abordagem para comentar o código - embora isso geralmente seja útil ao tentar abordagens alternativas, desde que os conhecidos efeitos colaterais possíveis sejam entendidos.
Albert Godfrind
3
A outra coisa que me ressentei do python é que ele é essencialmente uma linguagem criada por um homem. O que Guido diz é a verdade ... Temos todas essas incompatibilidades estranhas entre as versões linguísticas. Por quê ? Porque Guido disse isso ...
Albert Godfrind
12

Bem, as aspas triplas são usadas como comentários de múltiplas linhas nas doutrinas. E # comentários são usados ​​como comentários embutidos e as pessoas se acostumam.

A maioria das linguagens de script também não tem comentários de várias linhas. Talvez seja essa a causa?

Ver PEP 0008 , seção Comentários

E veja se o seu editor Python oferece algum atalho de teclado para comentar em bloco. O Emacs suporta, assim como o Eclipse, presumivelmente a maioria dos IDEs decentes.

Abgan
fonte
9

Do Zen de Python :

Deve haver uma - e preferencialmente apenas uma - maneira óbvia de fazê-lo.

Jeremy Cantrell
fonte
5

Pessoalmente, meu estilo de comentário diz que Java é como

/*
 * My multi-line comment in Java
 */

Portanto, ter comentários de linha única não é algo tão ruim se o seu estilo é típico do exemplo anterior, porque em comparação você teria

#
# My multi-line comment in Python
#

O VB.NET também é um idioma com apenas uma linha comentando e, pessoalmente, acho irritante, pois os comentários acabam parecendo menos com gostos e mais com algum tipo de citação

'
' This is a VB.NET example
'

Os comentários de linha única acabam tendo menos uso de caracteres do que os comentários de várias linhas e têm menos probabilidade de serem escapados por alguns caracteres desonestos em uma instrução regex, talvez? Eu tenderia a concordar com Ned.

Kezzer
fonte
5

Para comentar um bloco de código no Pycharm IDE:

  • Código Comentar com comentário de linha
  • Windows ou Linux: Ctrl+/
  • Mac OS: Command+/
Craig S. Anderson
fonte
4
# This
# is
# a 
# multi-line
# comment

Use o bloco de comentários ou pesquise e substitua (s / ^ / # / g) no seu editor para conseguir isso.

recursivo
fonte
3

Resolvi isso baixando uma macro para o meu editor de texto (TextPad) que me permite destacar linhas e depois insere # no primeiro de cada linha. Uma macro semelhante remove os # 's. Alguns podem perguntar por que a multilinha é necessária, mas é útil quando você está tentando "desativar" um bloco de código para fins de depuração.

kati
fonte
1

Para quem procura comentários com várias linhas em Python - o uso do formato de cotação tripla pode ter algumas consequências problemáticas, como acabei de aprender da maneira mais difícil. Considere isto:

this_dict = {
    'name': 'Bob',

"""
This is a multiline comment in the middle of a dictionary
"""

    'species': 'Cat'
}

O comentário de várias linhas será inserido na próxima sequência, atrapalhando a 'species'chave. Melhor usar apenas #para comentários.

Itamar Mushkin
fonte
0

Como a convenção # é comum, e realmente não há nada que você possa fazer com um comentário com várias linhas que não possa com um comentário #-sign. É um acidente histórico, como a ascendência dos /* ... */comentários que remontam ao PL / I,

Charlie Martin
fonte
0

Suponha que eles foram considerados desnecessários. Como é muito fácil digitar#a comment , os comentários com várias linhas podem consistir em muitos comentários de linha única.

Por outro lado, para HTML , há uma necessidade maior de multilinhas. É mais difícil continuar digitando <!--comments like this-->.

stalepretzel
fonte
4
esse não é o ponto - há casos de uso óbvios para comentários de uma linha e de várias linhas. Eu os usei extensivamente em outras línguas (embora eu saiba que os puristas de python não se importam com outras línguas). ;)
johndodo
1
tente fazer isso com 200 linhas de código, que você precisa retirar, colocar novamente e retirar novamente. Digitar 200 # iniciais começa a envelhecer muito rápido.
DragonLord 14/05
0

Isso é apenas um palpite .. mas

Por serem seqüências de caracteres, elas têm algum valor semântico (o compilador não se livra delas); portanto, faz sentido que sejam usadas como doutrinas. Eles realmente se tornam parte do AST , tornando mais fácil extrair a documentação.

hasen
fonte
0

Além disso, comentários multilinhas são uma merda . Lamento dizer, mas, independentemente do idioma, não os uso para nada além de fins de depuração. Digamos que você tenha um código como este:

void someFunction()
{
    Something
    /*Some comments*/
    Something else
}

Então você descobre que há algo em seu código que não pode ser corrigido com o depurador e, portanto, começa a depurá-lo manualmente, comentando trechos cada vez menores de código com esses comentários de várias linhas. Isso daria a função:

void someFunction()
{ /*
    Something
   /* Comments */
   Something more*/
}

Isso é realmente irritante.

martiert
fonte
3
Ótimo, mas o Python não tem /*comentários no estilo.
Triptych
17
Certo, já que o python não possui comentários multilinhas reais, foi meio difícil dar exemplos em python.
31710 martiert
2
Eu pessoalmente não entendo o problema. Basta excluir o extra * /. Ou use // para comentar linhas simples, se precisar ser preciso.
Natalie Adams
4
Existem vários idiomas (muitos deles funcionais por qualquer motivo) que permitem comentários aninhados. Procure por "aninhado" em rosettacode.org/wiki/Comments para obter exemplos.
19412 Keith
1
bem, sim, seria irritante colocar um comentário de várias linhas em um comentário de várias linhas. E embora eu me lembre apenas de um pouco do meu programa de cada vez, pelo menos me lembro para qual parte do meu programa estou analisando e com o que comentei. Mas se você nem se lembra disso, pode usar o fato de que alguns IDEs fazem itálico o que é um comentário. De qualquer forma, obviamente, para uma função tão pequena, você também pode usar comentários de linha única. Mas se você estiver comentando uma grande parte do programa, precisará realmente de um comentário com várias linhas. ou um editor de texto com esse recurso.
Barlop #
0

Comentários de várias linhas usando o IDLE em:

  • O Mac OS X , após a seleção do código, comente um bloco de código com Ctrl+ 3e descomente usando Ctrl+ 4.

  • O Windows , após a seleção do código, comente um bloco de código com Ctrl+ Alt+ 3e remova o comentário usando Ctrl+ At+ 4.

Jorgesys
fonte
-1

Lembro-me de ler sobre um cara que colocaria seus comentários de várias linhas em uma variável de citação tripla:

x = '''
This is my
super-long mega-comment.
Wow there are a lot of lines
going on here!
'''

Isso consome um pouco de memória, mas oferece funcionalidade de comentários em várias linhas e, além disso, a maioria dos editores destacará a sintaxe para você :)

Também é fácil comentar o código, simplesmente envolvendo-o com

x = '''

e

'''
turvyc
fonte
18
remova o x =e não ocupa nenhuma memória.
endolith 4/09/12