¿Hay alguna manera de crear comentarios multilínea en Python?

1157

Recientemente comencé a estudiar Python , pero no pude encontrar cómo implementar comentarios de varias líneas. La mayoría de los idiomas tienen símbolos de comentario de bloque como

/*

*/

Intenté esto en Python, pero arroja un error, por lo que probablemente esta no sea la forma correcta. ¿Python realmente tiene una función de comentarios multilínea?

Cazador de mazmorras
fuente
2
Supongo que siendo un lenguaje interpretado, tiene sentido, como en el caso de sh o bash o zsh, esa #es la única forma de hacer comentarios. Supongo que hace que sea más fácil interpretar los scripts de Python de esta manera.
Victor Zamanian
1
Sé que esta respuesta es antigua, pero la encontré porque tenía la misma pregunta. La respuesta aceptada sí funciona, aunque no sé lo suficiente de Python para conocer las complejidades de por qué puede no ser correcta (según ADTC).
Brandon Barney
55
@BrandonBarney Déjame explicarte el problema. La respuesta aceptada, que usa '' ', en realidad crea una cadena de varias líneas que no hace nada. Técnicamente, eso no es un comentario. Por ejemplo, puede escribir k = '' 'comentario falso, cadena real' ''. Luego, imprima (k) para ver qué significa ADTC.
pinyotae
3
Eso tiene mucho más sentido ahora. Estoy acostumbrado a vba donde la creación de una cadena no utilizada da como resultado un error. No me di cuenta de que Python simplemente lo ignora. Todavía funciona para depurar y aprender al menos, pero no es una buena práctica para el desarrollo real.
Brandon Barney
En el código fuente de Python, si rompe una línea larga, el editor la sangra automáticamente, para mostrar que la línea discontinua es realmente parte de la línea anterior. ¿Es eso lo que debería hacer si rompo una larga línea de pseudocódigo?
alpha_989

Respuestas:

1803

Puede usar cadenas entre comillas triples. Cuando no son una cadena de documentos (lo primero en una clase / función / módulo), se ignoran.

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

(Asegúrese de sangrar la guía de forma '''adecuada para evitar una IndentationError.)

Guido van Rossum (creador de Python) tuiteó esto como un "consejo profesional".

Sin embargo, la guía de estilo de Python, PEP8, favorece el uso de comentarios consecutivos de una sola línea , y esto también es lo que encontrará en muchos proyectos. Los editores de texto generalmente tienen un atajo para hacerlo fácilmente.

Petr Viktorin
fuente
17
Hm. Puse una gran cadena multilínea en un script de Python test.pysolo para ver. Cuando lo hago import test, test.pycse genera un archivo. Desafortunadamente, el pycarchivo es enorme y contiene toda la cadena como texto sin formato. ¿Estoy malinterpretando algo o este tweet es incorrecto?
unutbu
23
@unutbu, si era lo único en el archivo, era una cadena de documentos. Pon un poco de código antes y desaparecerá del pyc. Edité la respuesta y puse "módulo" en la lista de cosas que tienen cadenas de documentos.
Petr Viktorin
31
No me gustan las cadenas multilínea como comentarios. El resaltado de sintaxis los marca como cadenas, no como comentarios. Me gusta usar un editor decente que se ocupa automáticamente de comentar regiones y envolver comentarios de varias líneas mientras escribo. Por supuesto, es cuestión de gustos.
Sven Marnach
61
Como convención, me resulta útil usarla """para cadenas de documentos y '''para comentarios de bloque. De esta manera, puede envolver '''sus cadenas de documentos habituales sin conflictos.
Roshambo
19
Si bien puede usar cadenas de varias líneas como comentarios de varias líneas, me sorprende que ninguna de estas respuestas se refiera a la subsección PEP 8 que recomienda específicamente construir comentarios de varias líneas a partir de comentarios de una sola línea consecutivos, con #líneas en blanco para distinguir los párrafos .
Aire
82

Python tiene una sintaxis de cadena / comentario multilínea en el sentido de que, a menos que se use como cadenas de documentación, las cadenas multilínea no generan código de bytes, al igual que los #comentarios que se adjuntan. En efecto, actúa exactamente como un comentario.

Por otro lado, si dice que este comportamiento debe documentarse en la documentación oficial para que sea una sintaxis de comentario real, entonces sí, tendría razón al decir que no está garantizado como parte de la especificación del lenguaje.

En cualquier caso, su editor de texto también debería poder comentar fácilmente una región seleccionada (colocando un #frente de cada línea individualmente). Si no, cambie a un editor de texto que lo haga.

La programación en Python sin ciertas características de edición de texto puede ser una experiencia dolorosa. Encontrar el editor correcto (y saber cómo usarlo) puede marcar una gran diferencia en cómo se percibe la experiencia de programación de Python.

El editor de texto no solo debe poder comentar las regiones seleccionadas, sino que también debe poder mover fácilmente bloques de código a izquierda y derecha, y debe colocar automáticamente el cursor en el nivel de sangría actual cuando presiona Enter. El plegado de código también puede ser útil.


Para protegerse contra la descomposición de enlaces, aquí está el contenido del tweet de Guido van Rossum :

@BSUCSClub Sugerencia de Python: puede usar cadenas de varias líneas como comentarios de varias líneas. ¡A menos que se usen como cadenas de documentos, no generan código! :-)

unutbu
fuente
3
la cadena entre comillas triples ('' ') de hecho funciona para cumplir con comentarios de varias líneas.
Varun Bhatia
Gracias. Utilicé ('' ') y ("" ") para comentar el bloque, pero no me ayudó para las aplicaciones de Django. Por lo tanto, elija IDLE y hay opciones como comentar la región y descomentar regiones (acceso directo: Alt + 3 y Alt + 4 respectivamente) en el menú Formato . Ahora es más fácil que nunca ...
Saurav Kumar
También debe considerar usar un IDE. Sí, son fuertes, pero si se usan correctamente, pueden aumentar el tiempo de codificación. Personalmente solía usar PyDev, y ahora uso PTVS (con Visual Studio). Definitivamente recomendaría PTVS, ya que es realmente agradable trabajar con él, que contiene las características anteriores junto con mucho más: integración directa con virtualenvs, y una muy buena depuración, por decir lo menos
Sbspider
2
@HappyLeapSecond Creo que deberías aclararlo diciendo "Python no tiene una verdadera sintaxis de comentarios de varias líneas , pero admite cadenas de varias líneas que pueden usarse como comentarios".
ADTC
3
Lo que quiero es una manera fácil de comentar bloques enteros de código al realizar pruebas. Otros idiomas lo hacen fácil. Python es solo un dolor.
Albert Godfrind
45

De la respuesta aceptada ...

Puede usar cadenas entre comillas triples. Cuando no son una cadena de documentos (lo primero en una clase / función / módulo), se ignoran.

Esto simplemente no es cierto. A diferencia de los comentarios, las cadenas entre comillas triples todavía se analizan y deben ser sintácticamente válidas, independientemente de dónde aparezcan en el código fuente.

Si intentas ejecutar este 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

Obtendrás cualquiera ...

ValueError: invalid \x escape

... en Python 2.xo ...

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

... en Python 3.x.

La única forma de hacer comentarios de varias líneas que el analizador ignora es ...

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
fuente
Entonces, puedes usar r'raw string'- r'\xor' == '\\xor'.
GingerPlusPlus
1
Bueno, cualquier comentario "verdadero" de varias líneas también debe analizarse y ser sintácticamente válido. Los comentarios de estilo C no pueden contener un, */ya que terminará el bloque, por ejemplo.
1
@ dan1111 es obvio que el comentario no puede incluir el marcador final, pero esa es la única limitación.
el.pescado
14
'''Los "comentarios" tienen más limitaciones. Solo puede comentar declaraciones completas, mientras que los comentarios pueden comentar partes de la expresión. Ejemplo: En C, puede comentar algunos elementos de la lista: int a[] = {1, 2, /* 3, 4, */ 5};. Con la cadena de líneas múltiples, no puede hacer eso, ya que eso pondría una cadena dentro de su lista.
el.pescado
35

En Python 2.7, el comentario multilínea es:

"""
This is a
multilline comment
"""

En caso de que esté dentro de una clase, debe tabularla correctamente.

Por ejemplo:

class weather2():
   """
   def getStatus_code(self, url):
       world.url = url
       result = requests.get(url)
       return result.status_code
   """
SomeAnonymousPerson
fuente
20
las comillas triples son una forma de insertar texto que no hace nada (creo que podría hacer esto también con cadenas de comillas simples), pero no son comentarios: el intérprete realmente ejecuta la línea (pero la línea no No hagas nada). Es por eso que la sangría de un "comentario" entre comillas triples es importante.
Demis
12
Esta solución es incorrecta, el weather2comentario es en realidad una cadena de documentación, ya que es lo primero en la clase.
Ken Williams
De acuerdo con @KenWilliams. Esta no es una solución correcta. Intente poner esto en el medio de una función / clase, y vea cómo arruina su formateo y automatiza el plegado / revestimiento de código.
alpha_989
25

AFAIK, Python no tiene comentarios de bloque. Para comentar líneas individuales, puede usar el #carácter.

Si está utilizando Notepad ++ , hay un acceso directo para comentar en bloque . Estoy seguro de que otros como gVim y Emacs tienen características similares.

Sanjay T. Sharma
fuente
2
esto es incorrecto, vea las respuestas sobre el uso de comillas triples.
Fernando González Sánchez
10
@FernandoGonzalezSanchez: Realmente no es incorrecto. Esta "cadena de varias líneas como comentario" se puede describir mejor como un "pro-tip". Los documentos oficiales de Python no dicen nada al respecto, de ahí la pregunta publicada por OP.
Sanjay T. Sharma
8
Esa es una PEP para docstrings; no hay una sola mención de "comentario" en esa página.
Sanjay T. Sharma
12

Creo que no, excepto que no se procesa una cadena multilínea. Sin embargo, la mayoría, si no todos los IDE de Python tienen una tecla abreviada para 'comentar' múltiples líneas de código.

Anti tierra
fuente
11

Si pones un comentario en

"""
long comment here
"""

en medio de un script, Python / linters no lo reconocerán. El plegado estará en mal estado, ya que el comentario anterior no es parte de las recomendaciones estándar. Es mejor usar

# Long comment
# here.

Si usa Vim , puede agregar complementos como commentary.vim , para comentar automáticamente largas líneas de comentarios presionando Vjgcc. Donde Vjselecciona dos líneas de código y las gcccomenta.

Si no desea usar complementos como los anteriores, puede usar buscar y reemplazar como

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

Esto reemplazará el primer carácter en la línea actual y siguiente con #.

alpha_989
fuente
8

No existe tal característica como un comentario de varias líneas. #es la única forma de comentar una sola línea de código. Muchos de ustedes respondieron '' 'un comentario' '' como su solución.

Parece funcionar, pero internamente '''en Python toma las líneas encerradas como cadenas regulares que el intérprete no ignora como el uso de comentarios #.

Consulta la documentación oficial aquí

RATAN KUMAR
fuente
5

Lamentablemente, la cadena de caracteres no siempre se puede usar como comentario. Por lo tanto, es más seguro apegarse al estándar anteponiendo cada línea con a #.

Aquí hay un ejemplo:

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
fuente
4

Bueno, puedes intentar esto (cuando ejecutas la cita, la entrada a la primera pregunta debe citarse con '):

"""
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)

Cualquier cosa encerrada entre """será comentada.

Si está buscando comentarios de una sola línea, entonces es #.

K_holla
fuente
3

Comentario multilínea en Python:

Para mí, tanto '' 'como "" "funcionaron.

Ejemplo:

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

Ejemplo:

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

Los comentarios en línea en Python comienzan con un carácter hash.

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

¡Hola!

Tenga en cuenta que un carácter hash dentro de un literal de cadena es solo un carácter hash.

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

Marque # 100 para hacer una llamada de emergencia.

Un carácter hash también se puede usar para comentarios de una o varias líneas.

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

Hola

Mundo

Encierre el texto con comillas dobles triples para admitir docstring.

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"))

¡Hola John!

Encierre el texto con comillas simples triples para comentarios de bloque.

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

En Python 2.7.13:

Soltero:

"A sample single line comment "

Multilínea:

"""
A sample
multiline comment
on PyCharm
"""
AG
fuente
2
¿Estás diciendo que las comillas simples crean un comentario en Python 2.7?
mcalex
3
El uso de un solo conjunto de comillas crea una cadena. Un comentario de una sola línea debe tener el prefijo #.
johanno
2

Visual Studio Code universal alternar comentario oficial de varias líneas.

macOS: seleccione bloque de código y luego +/

Windows: seleccione bloque de código y luego Ctrl+/

Edison
fuente
2

Sí, está bien usar ambos:

'''
Comments
'''

y

"""
Comments
"""

Pero, lo único que todos deben recordar mientras se ejecuta en un IDE, es que deben 'EJECUTAR' todo el archivo para ser aceptado como códigos de líneas múltiples. Línea por línea 'EJECUTAR' no funcionará correctamente y mostrará un error.

Rajkamal Mishra
fuente
1

Para comentar varias líneas de código en Python es simplemente usar un #comentario de una sola línea en cada línea:

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

Para escribir comentarios de varias líneas "adecuados" en Python es utilizar cadenas de varias líneas con la """sintaxis Python tiene la función de cadenas de documentación (o cadenas de documentos). Brinda a los programadores una manera fácil de agregar notas rápidas con cada módulo, función, clase y método de Python.

'''
This is
multiline
comment
'''

Además, mencione que puede acceder a docstring por un objeto de clase como este

myobj.__doc__
shafik
fuente
¿Qué agrega esto sobre las respuestas anteriores?
Peter Mortensen
Mi respuesta contiene más detalles, lo que puede ayudar al desarrollador más.
Shafik
1

Puedes usar lo siguiente. Esto se llama 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
fuente
"DockString" ? Tiene una referencia?
Peter Mortensen
@PeterMortensen aquí tienes datacamp.com/community/tutorials/docstrings-python
merin
1

¡Aconsejaría no usar """para comentarios de varias líneas!

Aquí hay un ejemplo simple para resaltar lo que podría considerarse un comportamiento inesperado:

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

Ahora eche un vistazo a la salida:

I am a string

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

La cadena de varias líneas no se trató como un comentario, pero se concatenó 'clearly I'm also a string'para formar una sola cadena.

Si desea comentar varias líneas, hágalo de acuerdo con las pautas de PEP 8 :

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

Salida:

I am a string
clearly I am also a string
jojo
fuente
¿No debería ser " lang-bash" en lugar de " bash" para el resaltado de sintaxis? En cualquier caso, generalmente se ve raro (por ejemplo, "Algunos" aquí), incluso si en realidad se trata de comandos de línea de comandos con parámetros. lang-none(resaltado de sintaxis desactivado) puede ser una mejor opción.
Peter Mortensen
@ PeterMortensen gracias por señalar el extraño resaltar nuestro! Fui con "lang-none".
jojo
0

Usando PyCharm IDE.

Puede commenty uncommentlíneas de código usando Ctrl + /. Ctrl + / comenta o descomenta la línea actual o varias líneas seleccionadas con comentarios de una sola línea ({# in Django templates, or # in Python scripts). Pressing Ctrl+Shift+/para un bloque seleccionado de código fuente en una plantilla de Django rodea el bloque con {% comment %} and {% endcomment %}etiquetas.


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

print("Loop ended.")

Seleccione todas las líneas y luego presione Ctrl + /


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

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

Un comentario multilínea en realidad no existe en Python. El siguiente ejemplo consiste en una cadena no asignada, que es validada por Python para errores sintácticos.

Algunos editores de texto, como Notepad ++ , nos proporcionan accesos directos para comentar un código escrito o palabras.

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

Además, Ctrl+ Kes un acceso directo en Notepad ++ para bloquear comentarios. Agrega un #delante de cada línea debajo de la selección. Ctrl+ Shift+ Kes para descomentar bloque.

Tu sabes quien soy
fuente
0

Entre otras respuestas, creo que la forma más fácil es usar las funciones de comentarios IDE que usan el soporte de comentarios de Python #.

Estoy usando Anaconda Spyder y tiene:

  • Ctrl+ 1- Comentario / descomentar
  • Ctrl+ 4- Comenta un bloque de código
  • Ctrl+ 5- Descomenta un bloque de código

Comentaría / descomentaría una / varias líneas de código con #.

Lo encuentro más fácil.

Por ejemplo, un comentario de bloque:

# =============================================================================
#     Sample Commented code in spyder
#  Hello, World!
# =============================================================================
aniltilanthe
fuente
Gracias @PeterMortensen por la edición :)
aniltilanthe
-2

Seleccione las líneas que desea comentar y luego use Ctrl+ ?para comentar o descomentar el código de Python en el editor de texto sublime .

Para una sola línea puedes usar Shift+ #.

Tarjeet Singh
fuente