¿Por qué python utiliza comillas triples no convencionales para los comentarios?


¿Por qué python no solo usa el estilo tradicional de comentarios como C/C++ / Java utiliza:

/**
 * Comment lines 
 * More comment lines
 */

// line comments
// line comments
//

¿Hay una razón específica para esto o es simplemente arbitraria?

Author: jgritty, 2011-08-14

4 answers

Python no usa comillas triples para los comentarios. Los comentarios usan el carácter hash (también conocido como libra):

# this is a comment

La triple cita es una cadena doc , y, a diferencia de un comentario, está realmente disponible como una cadena real para el programa:

>>> def bla():
...     """Print the answer"""
...     print 42
...
>>> bla.__doc__
'Print the answer'
>>> help(bla)
Help on function bla in module __main__:

bla()
    Print the answer

No es estrictamente necesario usar comillas triples, siempre y cuando sea una cadena. Usar """ es solo una convención (y tiene la ventaja de ser multilínea).

 77
Author: balpha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-14 14:50:46

Varias de las respuestas obtuvieron muchos de los puntos, pero no dan la visión completa de cómo funcionan las cosas. Resumir...

# comment es como Python hace comentarios reales (similar a bash, y algunos otros lenguajes). Python solo tiene comentarios "hasta el final de la línea", no tiene ningún wrapper explícito de comentarios multilínea (a diferencia del /* .. */ de javascript). La mayoría de los IDE de Python le permiten seleccionar y comentar un bloque a la vez, esta es la cantidad de personas que manejan esa situación.

, Entonces hay cadenas normales de python de una sola línea: Pueden usar ' o " comillas (por ejemplo 'foo' "bar"). La principal limitación con estos es que no se envuelven a través de múltiples líneas. Para eso están las cadenas multilíneas: Son cadenas rodeadas por comillas triples simples o dobles (''' o """) y terminan solo cuando se encuentra un terminador sin escapatoria coincidente. Pueden continuar por tantas líneas como sea necesario, e incluir todos los espacios en blanco que intervengan.

Cualquiera de estos dos tipos de cadena defina un objeto de cadena completamente normal. Se les puede asignar un nombre de variable, se les pueden aplicar operadores, etc. Una vez analizado, no hay diferencias entre ninguno de los formatos. Sin embargo, hay dos casos especiales basados en dónde está la cadena y cómo se usa...

Primero, si una cadena acaba de escribirse, sin operaciones adicionales aplicadas, y no asignada a una variable, ¿qué le sucede? Cuando se ejecuta el código, la cadena desnuda se descarta básicamente. Así que la gente han encontrado conveniente comentar grandes bits de código python usando cadenas de varias líneas (siempre que escape cualquier cadena de varias líneas interna). Esto no es tan común, o semánticamente correcto, pero es permitido.

El segundo uso es que cualquiera de estas cadenas desnudas que siguen inmediatamente después de un def Foo(), class Foo(), o el inicio de un módulo, se tratan como cadenas que contienen documentación para ese objeto, y se almacenan en el atributo __doc__ del objeto. Este es el caso más común donde las cadenas pueden parecer un "comentario". La diferencia es que son realizando un rol activo como parte del código analizado, siendo almacenados en __doc__... y a diferencia de un comentario, se pueden leer en tiempo de ejecución.

 41
Author: Eli Collins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-21 11:59:26

Las comillas triples no son comentarios. Son literales de cadena que abarcan varias líneas e incluyen esos saltos de línea en la cadena resultante. Esto le permite utilizar

somestr = """This is a rather long string containing
several lines of text just as you would do in C.
    Note that whitespace at the beginning of the line is\
 significant."""

En lugar de

somestr = "This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
    Note that whitespace at the beginning of the line is\
 significant."
 16
Author: jamessan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-14 14:56:34

La mayoría de los lenguajes de scripting usan # como marcador de comentarios para saltar automáticamente el shebang (#!) que especifica al cargador del programa el intérprete a ejecutar (como en #!/ bin / bash). Alternativamente, el intérprete podría recibir instrucciones para omitir automáticamente la primera línea, pero es mucho más conveniente definir # como marcador de comentario y eso es todo, por lo que se omite como consecuencia.

 5
Author: Stefano Borini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-14 16:22:34