Es ‘# – * – encoding: utf-8 – * -‘ también un comentario en Python?

Cuando usamos # para insertar comentarios en Python, entonces, ¿cómo toma Python:

 # -*- coding: utf-8 -*- 

¿diferentemente?

Sí, también es un comentario. Y el contenido de ese comentario tiene un significado especial si se encuentra en la parte superior del archivo, en las dos primeras líneas.

De la documentación de las declaraciones de encoding :

Si un comentario en la primera o segunda línea del script de Python coincide con la coding[=:]\s*([-\w.]+) expresión regular coding[=:]\s*([-\w.]+) , Este comentario se procesa como una statement de encoding; el primer grupo de esta expresión nombra la encoding del archivo de código fuente. La statement de encoding debe aparecer en una línea propia. Si es la segunda línea, la primera línea también debe ser una línea de solo comentarios.

Tenga en cuenta que no importa qué códec se debe utilizar para leer el archivo, en lo que respecta a los comentarios. Python normalmente ignoraría todo después del # token, y en todos los códecs de código fuente aceptados, los caracteres # , la statement de encoding y el separador de línea están codificados exactamente de la misma manera que todos son superconjuntos de ASCII. Así que todo lo que tiene que hacer el analizador es leer una línea, buscar el texto especial en el comentario, leer otra si es necesario, buscar el comentario, luego configurar el analizador para que lea los datos de acuerdo con el códec dado.

Dado que se requiere que el comentario sea el primero o el segundo en el archivo (y si es la segunda línea, la primera línea también debe ser un comentario), esto es completamente seguro, ya que el códec configurado solo puede marcar la diferencia. Líneas sin comentarios de todos modos.

Consulte las declaraciones de encoding en el Manual de referencia de Python:

Si un comentario en la primera o segunda línea del script de Python coincide con la coding[=:]\s*([-\w.]+) expresión regular coding[=:]\s*([-\w.]+) , Este comentario se procesa como una statement de encoding; el primer grupo de esta expresión nombra la encoding del archivo de código fuente.

(Énfasis mío)

Así que sí, es un comentario, uno especial. Es especial porque el analizador intentará actuar sobre él y no lo ignorará como lo hace con los comentarios que no están en la primera o segunda línea. Tomemos, por ejemplo, una statement de encoding no registrada en un archivo de muestra decl.py :

 # # -*- coding: unknown-encoding -*- print("foo") 

Si intenta y ejecuta esto, Python intentará procesarlo, fallará y se quejará:

 python decl.py File "decl.py", line 1 SyntaxError: encoding problem: unknown-encoding