2009-04-02 19 views
23

En cuanto a la forma "estándar" para poner los comentarios dentro del código fuente de Python:comentarios Python: # vs. cadenas

def func(): 
    "Func doc" 
    ... <code> 
    'TODO: fix this' 
    #badFunc() 
    ... <more code> 

def func(): 
    "Func doc" 
    ... <code> 
    #TODO: fix this 
    #badFunc() 
    ... <more code> 

prefiero escribir comentarios generales como cadenas en lugar de un prefijo # 's. La guía de estilo oficial de Python no menciona el uso de cadenas como comentarios (si no me lo perdí al leerlo).

Me gusta así, principalmente porque creo que el carácter # se ve feo con los bloques de comentarios. Hasta donde yo sé estas cadenas no hacen nada.

¿Hay desventajas al hacer esto?

Respuesta

59

No haga mal uso de cadenas (declaraciones no operativas) como comentarios. Docstrings, p. la primera cadena en un módulo, clase o función, son especiales y definitivamente recomendables.

Tenga en cuenta que docstrings son documentación, ¡y la documentación y los comentarios son dos cosas diferentes!

  • La documentación es importante entender lo que que hace el código.
  • Los comentarios explican cómo el código lo hace.

documentación es leído por personas que uso su código, los comentarios de personas que quieren entienden su código, por ejemplo, para mantenerlo

El uso de cadenas para comentarios tiene las desventajas siguientes (potenciales):

  • Se confunde a las personas que no saben que la cadena no hace nada.
  • Los comentarios y los literales de cadena se destacan de forma diferente en los editores de código, por lo que su estilo puede hacer que su código sea más difícil de leer.
  • Podría afectar al rendimiento y/o el uso de memoria (si las cadenas no se eliminan durante la compilación de código de bytes, la eliminación de los comentarios se realiza en el nivel de escáner para su definitivamente más barato)

Lo más importante para los programadores de Python: Es no pythonic:

Debería haber una, y preferiblemente solo una, forma obvia de hacerlo.

Cumplir con los estándares, usar comentarios.

+7

Para el registro, no parece que afectará el rendimiento. Al mirar la salida dis.dis, o al ejecutar cadenas en un módulo compilado, no se observan rastros de las cadenas, por lo que parece que se han optimizado durante la compilación. (Las otras razones son más que suficientes, sin embargo) – Brian

4

Creo que solo el primer literal de cadena en una definición (o clase) es "especial", es decir, es almacenado por el intérprete en el objeto (o clase) definido docstring.

Cualquier otro literal de cadena que coloque en el código, en el peor de los casos, significará que el intérprete construirá el valor de cadena en tiempo de ejecución, y luego simplemente lo descartará. Esto significa que hacer "comentarios" al ensuciar el código con constantes de cadena puede costar, en términos de rendimiento.

Por supuesto, no he comparado esto, y tampoco conozco el intérprete de Python lo suficiente como para decirlo con seguridad.

5

La desventaja, por supuesto, es que alguien más que lo lea encontrará que las cadenas de códigos y cadenas de comentarios están intercaladas, lo que podría ser confuso.