Como utilizamos # para la inserción de comentarios en Python, entonces, ¿cómo Python toma:

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

de manera diferente?

  • en realidad, esto sucede a menudo con el software. En realidad algunas de primaria análisis de los comentarios y buscar comandos específicos. Otro ejemplo que tengo en mente es Hypermesh, pero estoy seguro de que hay muchos más.
  • Usted puede pensar en él como un preprocesador que se ejecuta antes de que el analizador que se asoma en el archivo y decide cómo debe ser decodificado. El intérprete en sí se inicia y se salta la línea, porque su comentario. Algunos unixy editores de texto, hacer lo mismo que saber cómo funciona el editor debe abrir el archivo.
  • Tal vez el ejemplo más destacado: en.wikipedia.org/wiki/Shebang_(Unix)
  • Vale la pena señalar que el -*- partes son totalmente opcionales, como Python, pero incluso ellos parece ser una costumbre. El docs decir que «es reconocido también por GNU Emacs», lo que sugiere que es de donde proviene (un ejemplo de lo que @tdelaney estaba diciendo acerca de los editores de texto), pero yo la he visto (y yo mismo) en el código que nunca fue tocado por Emacs.
  • He usado el VIM variante del comentario bastante a menudo. Está usted seguro de que no era una emacs usuario en el equipo en algún lugar que valora tener su editor de auto-configura cuando la edición del archivo?
  • Me siento como que estoy admitiendo carga-culto de programación, pero he utilizado yo mismo en mi propia, personal, proyectos en solitario, porque en algún lugar me parece que han tomado esa era la forma habitual. De hecho… ahora que lo pienso, es porque cuando empecé en Python, mi (no Emacs) editor de pediría que me agregue! ¿Qué era? INACTIVO? Kate? Creo que fue Kate…
  • otros editores recogido el formato. Tal vez Kate analiza también?
  • no hubo suerte, kate tiene su propio formato.
  • ¡Ya lo tengo! Si usted está usando IDLE de Python 2, y si el archivo contiene caracteres que no son ASCII (como en mi caso a menudo lo hizo, si he añadido una línea del copyright), a continuación, se le preguntará si desea agregar una declaración de codificación, utilizando Emacs -*- estilo. Así que lo cogí de.

InformationsquelleAutor ngShravil.py | 2017-01-16

2 Comentarios

  1. 51

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

    De la las declaraciones de Codificación documentación:

    Si un comentario en la primera o segunda línea de la secuencia de comandos de Python coincida con la expresión regular coding[=:]\s*([-\w.]+), este comentario es procesada como una declaración de codificación; el primer grupo de esta expresión nombres de la codificación del archivo de código fuente. La declaración de codificación debe aparecer en una línea propia. Si es la segunda línea, la primera línea debe ser también un comentario-sólo la línea.

    Tenga en cuenta que no importa qué códec debe ser utilizado para leer el archivo, en la medida de como los comentarios son de que se trate. Python normalmente ignorar todo después de la # token, y en todas aceptado el código fuente de los códecs de la #, la codificación de la declaración y el separador de línea de caracteres se codifican de la misma manera son todas las superseries de ASCII. Así que todo el parser tiene que hacer es leer una línea, buscar el texto especial en el comentario, leer otro si es necesario, busque el comentario, a continuación, configurar el analizador de leer los datos de acuerdo al codec.

    Dado que el comentario es necesario para ser el primer o el segundo en el archivo (y si es la segunda línea, la primera línea debe ser un comentario demasiado), esto es totalmente segura, ya que la configuración de códec sólo puede hacer una diferencia para los no-líneas de comentario de todos modos.

    • Así que la pregunta real es: ¿por qué usamos # -*- coding: X -*- en lugar de # coding: X?
    • usted no tiene que. Nada que coincida con la expresión regular funcionaría. Pero si usted está usando Emacs como editor, luego de que los comentarios también informa de que el editor de qué códec a utilizar.
    • ` ¿qué códec se guarda el archivo como » no se debería what encoding the file is saved as?
    • esa frase, de hecho, tenía problemas, editado.
    • hay otros como este, el cual, añade un significado especial para la línea de comentario?
    • No hay cargas. No es la shebang línea que los sistemas Unix uso, y el Windows py lanzador se mira en la misma info. Como se ha mencionado, muchos editores se puede configurar el uso de texto en los comentarios (no sólo qué códec a utilizar, sino en otros muchos aspectos, consulte el emacs y vim docs). Probablemente hay más.
    • muchos de pelusa uso de configuración en los comentarios demasiado, consulte el pylint manual o flake8.
    • Ya que los comentarios no tienen ningún significado para el programa, que son fácilmente influenciados por otros sistemas que tienen que trabajar con el código, básicamente.
    • en todas aceptado el código fuente de los códecs de la #, la codificación de la declaración y el separador de línea de caracteres codificado exactamente el mismo: ¿Python no soporte UTF-16 código fuente?
    • no, multi-byte codecs no son compatibles, por esta misma razón. Desde PEP 263: Cualquier codificación, que permite el procesamiento de los primeros dos líneas en la forma arriba indicada es permitido como el código fuente, codificación, esto incluye ASCII compatible codificaciones, así como ciertas multi-byte codificaciones como Shift_JIS. No se incluyen las codificaciones que el uso de dos o más bytes para todos los caracteres, como por ejemplo, UTF-16. La razón de esto es mantener la codificación del algoritmo de detección en el tokenizer simple.

  2. 17

    Ver las declaraciones de codificación en el Manual de Referencia de Python:

    Si un comentario en la primera o segunda línea de la secuencia de comandos de Python coincida con la expresión regular coding[=:]\s*([-\w.]+), este comentario se procesa como una declaración de codificación; el primer grupo de esta expresión nombres de la codificación del archivo de código fuente.

    (el Énfasis es mío)

    Así que sí, es un comentario, una especial. Es especial en el sentido de que el analizador se va a tratar y actuar en él y no lo ignoran, como también para los comentarios, no en la primera o segunda línea. Tomemos, por ejemplo, no registrado declaración de codificación en un archivo de ejemplo decl.py:

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

    Si intenta ejecutar esto, Python se trate y el proceso que fallan y se quejan:

    python decl.py 
      File "decl.py", line 1
    SyntaxError: encoding problem: unknown-encoding
    • Pero si usted se registre unkown-encoding como una codificación de, digamos, con un .pth archivo, luego de que el codec es en realidad la carga y se utiliza. Esto proporciona un muy bonito e interesante oportunidad para pre-analizar el código de procesamiento.
    • De hecho @MartijnPieters yo principalmente agregó que como un ejemplo de código Python procesos de la declaración, no para hacer cualquier otra reclamación por ello.
    • github.com/dropbox/pyxl podría ser un ejemplo de lo que @MartijnPieters se refiere.

Dejar respuesta

Please enter your comment!
Please enter your name here