Existe uma maneira de criar comentários multilinhas no Python?

1157

Recentemente, comecei a estudar Python , mas não consegui descobrir como implementar comentários de várias linhas. A maioria dos idiomas possui símbolos de comentário de bloco como

/*

*/

Eu tentei isso em Python, mas ele gera um erro, então essa provavelmente não é a maneira correta. O Python realmente possui um recurso de comentário multilinha?

Caçador de cavernas
fonte
2
Suponho que sendo uma linguagem interpretada, faz sentido, como no caso de sh ou bash ou zsh, essa #é a única maneira de fazer comentários. Suponho que isso facilita a interpretação de scripts Python dessa maneira.
Victor Zamanian 14/03
1
Sei que essa resposta é antiga, mas me deparei com ela porque tinha a mesma pergunta. A resposta aceita FUNCIONA, embora eu não conheça Python o suficiente para saber os meandros de por que ela pode não estar correta (por ADTC).
Brandon Barney
5
@BrandonBarney Deixe-me explicar a questão. A resposta aceita, que usa '' ', na verdade cria uma string de várias linhas que não faz nada. Tecnicamente, isso não é um comentário. Por exemplo, você pode escrever k = '' 'comentário falso, string real' ''. Em seguida, imprima (k) para ver o que significa ADTC.
precisa
3
Isso faz muito mais sentido agora. Estou acostumado a vba onde a criação de uma seqüência de caracteres não utilizada resulta em um erro. Eu não percebi python apenas ignora. Ele ainda funciona para depuração e aprendizado, pelo menos, mas não é uma boa prática para o desenvolvimento real.
Brandon Barney
No código-fonte Python, se você quebrar uma linha longa, o editor o recuará automaticamente, para mostrar que a linha quebrada é realmente parte da linha anterior? É isso que devo fazer se interromper uma longa linha de pseudocódigo?
alpha_989

Respostas:

1802

Você pode usar cadeias de caracteres triplas. Quando não são uma sequência de documentos (a primeira coisa em uma classe / função / módulo), eles são ignorados.

'''
This is a multiline
comment.
'''

(Certifique-se de recuar a liderança '''adequadamente para evitar um IndentationError.)

Guido van Rossum (criador do Python) twittou isso como uma "dica profissional".

No entanto, o guia de estilo do Python, PEP8, prefere o uso de comentários consecutivos de linha única , e é também isso que você encontrará em muitos projetos. Os editores de texto geralmente têm um atalho para fazer isso facilmente.

Petr Viktorin
fonte
17
Hum. Coloquei uma enorme cadeia de linhas múltiplas em um script python test.pyapenas para ver. Quando eu faço import test, um test.pycarquivo é gerado. Infelizmente, o pycarquivo é enorme e contém toda a string como texto sem formatação. Estou entendendo mal algo ou este tweet está incorreto?
Unutbu
23
@unutbu, se era a única coisa no arquivo, era uma doutrina. Coloque algum código antes dele e ele desaparecerá do pyc. Eu editei a resposta e coloquei "module" na lista de itens que possuem docstrings.
Petr Viktorin
31
Não gosto de sequências multilinhas como comentários. O destaque da sintaxe as marca como cadeias, não como comentários. Eu gosto de usar um editor decente que lida automaticamente com o comentário de regiões e quebra de comentários de várias linhas enquanto digito. Claro, é uma questão de gosto.
Sven Marnach
61
Como convenção, acho útil usar """para documentos e '''para bloquear comentários. Dessa maneira, você pode '''contornar suas doutrinas habituais sem conflito.
Roshambo
19
Embora você possa usar cadeias de linhas múltiplas como comentários de várias linhas, estou surpreso que nenhuma dessas respostas se refira à subseção PEP 8 que recomenda especificamente a construção de comentários de várias linhas a partir de comentários consecutivos de linha única, com #linhas em branco para distinguir parágrafos .
ar
82

O Python possui uma sintaxe de cadeia de caracteres / comentário multilinha no sentido de que, a menos que seja usada como documentação, as cadeias de# linhas múltiplas não geram bytecode - assim como comentários pré-definidos. Com efeito, ele age exatamente como um comentário.

Por outro lado, se você disser que esse comportamento deve ser documentado na documentação oficial para ser uma verdadeira sintaxe de comentário, sim, você diria que não é garantido como parte da especificação do idioma.

De qualquer forma, seu editor de texto também poderá comentar facilmente uma região selecionada (colocando um #na frente de cada linha individualmente). Caso contrário, mude para um editor de texto que sim.

Programar em Python sem certos recursos de edição de texto pode ser uma experiência dolorosa. Encontrar o editor certo (e saber usá-lo) pode fazer uma grande diferença na percepção da experiência de programação do Python.

O editor de texto não deve apenas comentar as regiões selecionadas, mas também pode deslocar facilmente os blocos de código para a esquerda e a direita, além de posicionar automaticamente o cursor no nível de recuo atual ao pressionar Enter. A dobragem de código também pode ser útil.


Para se proteger contra a deterioração de links, eis o conteúdo do tweet de Guido van Rossum :

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

unutbu
fonte
3
A cadeia de caracteres tripla entre aspas ('' ') realmente funciona para preencher comentários de várias linhas.
Varun Bhatia
Obrigado .. Usei ('' ') e ("" ") para comentar o bloco, mas isso não me ajudou em aplicativos Django. Então, escolha IDLE e existem opções como Comentar região e Remover comentários (atalho: Alt + 3 e Alt + 4, respectivamente) sob Format . menu agora é mais fácil do que nunca ..
Saurav Kumar
Você também deve considerar o uso de um IDE. Sim, eles são pesados, mas se usados ​​corretamente, podem realmente aumentar o tempo de codificação. Eu pessoalmente costumava usar o PyDev e agora uso o PTVS (com o visual studio). Eu definitivamente recomendo PTVs, uma vez que é muito bom para trabalhar, contendo as características acima, juntamente com um muito mais - integração direta com virtualenvs, e realmente bom depuração, para dizer o mínimo
Sbspider
2
@HappyLeapSecond Acho que você deve esclarecer dizendo "Python não possui uma sintaxe de comentário de várias linhas verdadeira , mas suporta strings de várias linhas que podem ser usadas como comentários".
ADTC
3
O que eu quero é uma maneira fácil de comentar blocos inteiros de código durante o teste. Outros idiomas facilitam isso. Python é apenas uma dor.
Albert Godfrind
45

A partir da resposta aceita ...

Você pode usar cadeias de caracteres triplas. Quando não são uma sequência de documentos (a primeira coisa em uma classe / função / módulo), eles são ignorados.

Isto simplesmente não é verdade. Diferentemente dos comentários, as cadeias de caracteres triplas ainda são analisadas e devem ser sintaticamente válidas, independentemente de onde elas apareçam no código-fonte.

Se você tentar executar esse código ...

def parse_token(token):
    """
    This function parses a token.
    TODO: write a decent docstring :-)
    """

    if token == '\\and':
        do_something()

    elif token == '\\or':
        do_something_else()

    elif token == '\\xor':
        '''
        Note that we still need to provide support for the deprecated
        token \xor. Hopefully we can drop support in libfoo 2.0.
        '''
        do_a_different_thing()

    else:
        raise ValueError

Você receberá ...

ValueError: invalid \x escape

... no Python 2.x ou ...

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 79-80: truncated \xXX escape

... no Python 3.x.

A única maneira de fazer comentários de várias linhas que são ignorados pelo analisador é ...

elif token == '\\xor':
    # Note that we still need to provide support for the deprecated
    # token \xor. Hopefully we can drop support in libfoo 2.0.
    do_a_different_thing()
Aya
fonte
Então, você pode usar r'raw string'- r'\xor' == '\\xor'.
GingerPlusPlus
1
Bem, qualquer comentário com várias linhas "verdadeiro" também deve ser analisado e sintaticamente válido. Comentários no estilo C não podem conter um */, pois encerrará o bloco, por exemplo.
1
@ dan1111 é óbvio que o comentário não pode incluir marcador final, mas essa é a única limitação.
el.pescado
14
'''"comentários" têm mais limitações. Você pode comentar apenas declarações inteiras, enquanto comentários podem comentar partes da expressão. Exemplo: Em C, você pode comentar alguns elementos da lista: int a[] = {1, 2, /* 3, 4, */ 5};. Com a sequência de linhas múltiplas, você não pode fazer isso, pois isso colocaria uma sequência dentro da sua lista.
el.pescado
35

No Python 2.7, o comentário multilinha é:

"""
This is a
multilline comment
"""

Caso esteja dentro de uma classe, você deve tabular adequadamente.

Por exemplo:

class weather2():
   """
   def getStatus_code(self, url):
       world.url = url
       result = requests.get(url)
       return result.status_code
   """
SomeAnonymousPerson
fonte
20
aspas triplas são uma maneira de inserir texto que não faz nada (acredito que você também pode fazer isso com seqüências regulares de aspas simples), mas não são comentários - o intérprete realmente executa a linha (mas a linha não faça qualquer coisa). É por isso que o recuo de um 'comentário' com três citações é importante.
Demis
12
Esta solução está incorreta, o weather2comentário é na verdade uma docstring, pois é a primeira coisa na classe.
William Williams
Concorde com @KenWilliams. Esta não é uma solução correta. Tente colocar isso no meio de uma função / classe e veja como isso atrapalha sua formatação e automatização da dobragem / limpeza de códigos.
alpha_989
25

AFAIK, Python não tem comentários de bloqueio. Para comentar linhas individuais, você pode usar o #caractere.

Se você estiver usando o Notepad ++ , há um atalho para comentários em bloco . Tenho certeza que outros como gVim e Emacs têm recursos semelhantes.

Sanjay T. Sharma
fonte
2
isto está incorreto, veja as respostas sobre o uso de aspas triplas.
Fernando Gonzalez Sanchez
10
@FernandoGonzalezSanchez: Realmente não está incorreto. Essa "sequência de várias linhas como comentário" pode ser melhor descrita como uma "dica profissional". Os documentos oficiais do Python não dizem nada sobre isso, daí a pergunta postada pelo OP.
Sanjay T. Sharma
8
Esse é um PEP para docstrings; não há uma única menção a "comentário" nessa página.
Sanjay T. Sharma
12

Eu acho que não, exceto que uma cadeia de linhas múltiplas não é processada. No entanto, a maioria, se não todos os IDEs do Python, têm uma tecla de atalho para 'comentar' várias linhas de código.

Anti Terra
fonte
11

Se você colocar um comentário em

"""
long comment here
"""

no meio de um script, Python / linters não reconhecerá isso. A dobragem será confusa, pois o comentário acima não faz parte das recomendações padrão. É melhor usar

# Long comment
# here.

Se você usa o Vim , pode plugins como commentary.vim , para comentar automaticamente longas filas de comentários pressionando Vjgcc. Onde Vjseleciona duas linhas de código e as gcccomenta.

Se você não quiser usar plug-ins como o descrito acima, use a pesquisa e substitua-o como

:.,.+1s/^/# /g

Isso substituirá o primeiro caractere na linha atual e na próxima com #.

alpha_989
fonte
8

Não existe um recurso como um comentário de várias linhas. #é a única maneira de comentar uma única linha de código. Muitos de vocês responderam '' 'um comentário' '' como sua solução.

Parece funcionar, mas internamente '''no Python utiliza as linhas delimitadas como seqüências regulares que o intérprete não ignora como o uso de comentários #.

Consulte a documentação oficial aqui

RATAN KUMAR
fonte
5

Infelizmente, a stringificação nem sempre pode ser usada como comentário! Portanto, é mais seguro seguir o padrão que antecede cada linha com a #.

Aqui está um exemplo:

test1 = [1, 2, 3, 4,]       # test1 contains 4 integers

test2 = [1, 2, '''3, 4,'''] # test2 contains 2 integers **and the string** '3, 4,'
d.nedelchev
fonte
4

Bem, você pode tentar isso (ao executar o citado, a entrada para a primeira pergunta deve ser citada '):

"""
print("What's your name? ")
myName = input()
print("It's nice to meet you " + myName)
print("Number of characters is ")
print(len(myName))
age = input("What's your age? ")
print("You will be " + str(int(age)+1) + " next year.")

"""
a = input()
print(a)
print(a*5)

O que for incluído entre """será comentado.

Se você está procurando comentários de linha única, é isso #.

K_holla
fonte
3

Comentário multilinha em Python:

Para mim, '' 'e "" "funcionaram.

Exemplo:

a = 10
b = 20
c = a+b
'''
print ('hello')
'''
print ('Addition is: ', a+b)

Exemplo:

a = 10
b = 20
c = a+b
"""
print('hello')
"""
print('Addition is: ', a+b)
Viraj Wadate
fonte
3

Os comentários embutidos no Python começam com um caractere de hash.

hello = "Hello!" # This is an inline comment
print(hello)

Olá!

Observe que um caractere de hash em um literal de seqüência de caracteres é apenas um caractere de hash.

dial = "Dial #100 to make an emergency call."
print(dial)

Disque # 100 para fazer uma chamada de emergência.

Um caractere de hash também pode ser usado para comentários de uma ou várias linhas.

hello = "Hello"
world = "World"
# First print hello
# And print world
print(hello)
print(world)

Olá

Mundo

Coloque o texto entre aspas duplas triplas para oferecer suporte a doutrinas.

def say_hello(name):
    """
    This is docstring comment and
    it's support multi line.
    :param name it's your name
    :type name str
    """
    return "Hello " + name + '!'


print(say_hello("John"))

Olá john!

Coloque o texto entre aspas simples triplas para comentários em bloco.

'''
I don't care the parameters and
docstrings here.
'''
Madan Sapkota
fonte
2

No Python 2.7.13:

Solteiro:

"A sample single line comment "

Multilinha:

"""
A sample
multiline comment
on PyCharm
"""
AG
fonte
2
Você está dizendo que aspas simples criam um comentário no python 2.7?
Mcalex
3
O uso de um único conjunto de aspas cria uma sequência. Um comentário de linha única deve ser prefixado com um #.
Johanno 22/09
2

Alternar comentário oficial de várias linhas universal do Visual Studio Code .

macOS: selecione o bloco de código e, em seguida, +/

Windows: selecione o bloco de código e, em seguida, Ctrl+/

Edison
fonte
2

Sim, é bom usar os dois:

'''
Comments
'''

e

"""
Comments
"""

Porém, a única coisa que você precisa se lembrar enquanto executa um IDE é que 'EXECUTAR' o arquivo inteiro para ser aceito como vários códigos de linhas. Linha por linha 'RUN' não funcionará corretamente e mostrará um erro.

Rajkamal Mishra
fonte
1

Para comentar várias linhas de código no Python, basta usar um #comentário de linha única em todas as linhas:

# This is comment 1
# This is comment 2 
# This is comment 3

Para escrever comentários "apropriados" de várias linhas no Python, é usar strings de várias linhas com a """sintaxe Python que possui o recurso de strings de documentação (ou docstrings). Ele fornece aos programadores uma maneira fácil de adicionar notas rápidas com todos os módulos, funções, classes e métodos do Python.

'''
This is
multiline
comment
'''

Além disso, mencione que você pode acessar a documentação por um objeto de classe como este

myobj.__doc__
shafik
fonte
O que isso acrescenta sobre as respostas anteriores?
Peter Mortensen em
Minha resposta contém mais detalhes, o que pode ajudar mais o desenvolvedor.
shafik
1

Você pode usar o seguinte. Isso é chamado DockString.

def my_function(arg1):
    """
    Summary line.
    Extended description of function.
    Parameters:
    arg1 (int): Description of arg1
    Returns:
    int: Description of return value
    """
    return arg1

print my_function.__doc__
merin
fonte
"DockString" ? Você tem uma referência?
Peter Mortensen em
@PeterMortensen aqui você vai datacamp.com/community/tutorials/docstrings-python
merin 04/02
1

Eu desaconselho o uso """de comentários em várias linhas!

Aqui está um exemplo simples para destacar o que pode ser considerado um comportamento inesperado:

print('{}\n{}'.format(
    'I am a string',
    """
    Some people consider me a
    multi-line comment, but
    """
    'clearly I am also a string'
    )
)

Agora dê uma olhada na saída:

I am a string

    Some people consider me a
    multi-line comment, but
    clearly I am also a string

A sequência de várias linhas não foi tratada como comentário, mas foi concatenada 'clearly I'm also a string'para formar uma única sequência.

Se você quiser comentar várias linhas, faça-o de acordo com as diretrizes do PEP 8 :

print('{}\n{}'.format(
    'I am a string',
    # Some people consider me a
    # multi-line comment, but
    'clearly I am also a string'
    )
)

Resultado:

I am a string
clearly I am also a string
jojo
fonte
Não deveria ser " lang-bash" em vez de " bash" para o destaque da sintaxe? De qualquer forma, geralmente parece estranho (por exemplo, para "Alguns" aqui) - mesmo que sejam realmente comandos de linha de comando com parâmetros. lang-none(realce da sintaxe desativado) pode ser uma escolha melhor.
Peter Mortensen em
@ PeterMortensen obrigado por apontar o estranho destacando o nosso! Fui com "lang-none".
jojo
0

Usando o PyCharm IDE.

Você pode commente uncommentlinhas de código usando Ctrl + /. Ctrl + / comenta ou descomenta a linha atual ou várias linhas selecionadas com comentários de linha única ({# in Django templates, or # in Python scripts). Pressing Ctrl+Shift+/para um bloco selecionado de código-fonte em um modelo do Django envolve o bloco com {% comment %} and {% endcomment %}tags.


n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print(n)

print("Loop ended.")

Selecione todas as linhas e pressione Ctrl + /


# n = 5
# while n > 0:
#     n -= 1
#     if n == 2:
#         break
#     print(n)

# print("Loop ended.")
0m3r
fonte
0

Um comentário multilinha não existe realmente no Python. O exemplo abaixo consiste em uma sequência não atribuída, validada pelo Python para erros sintáticos.

Alguns editores de texto, como o Notepad ++ , fornecem atalhos para comentar um trecho de código ou palavras.

def foo():
    "This is a doc string."
    # A single line comment
    """
       This
       is a multiline
       comment/String
    """
    """
    print "This is a sample foo function"
    print "This function has no arguments"
    """
    return True

Além disso, Ctrl+ Ké um atalho no Bloco de notas ++ para bloquear comentários. Ele adiciona um #na frente de cada linha da seleção. Ctrl+ Shift+ Ké para descomentar bloco.

Você sabe quem eu sou
fonte
0

Entre outras respostas, acho que a maneira mais fácil é usar as funções de comentários do IDE que usam o suporte a comentários do Python #.

Estou usando o Anaconda Spyder e ele tem:

  • Ctrl+ 1- Comentário / comentário
  • Ctrl+ 4- Comente um bloco de código
  • Ctrl+ 5- Descomente um bloco de código

Comentaria / descomentaria uma / várias linhas / s de código com #.

Eu acho o mais fácil.

Por exemplo, um comentário em bloco:

# =============================================================================
#     Sample Commented code in spyder
#  Hello, World!
# =============================================================================
aniltilanthe
fonte
Obrigado @PeterMortensen pela edição :)
aniltilanthe
-2

Selecione as linhas que deseja comentar e, em seguida, use Ctrl+ ?para comentar ou descomentar o código Python no editor Sublime Text .

Para linha única, você pode usar Shift+ #.

Tarjeet Singh
fonte