Esta es realmente una pregunta teórica de un novato en python que quiere entender más.
Sigo olvidando los dos puntos después de las declaraciones iniciales de bloque en python. A eso me refiero:
for <variable> in <sequence>:
if <blah blah>:
Mi pensamiento es que una de las razones por las que sigo falsificando es que están implícitas de facto: dos puntos o no, la declaración termina con esa línea.
Mi pregunta, que hago para saber cómo funciona la sintaxis de Python, es si el colon es realmente innecesario. Si cambiara la sintaxis de Python para que el colon ya no sea necesario, ¿se rompería algo? ¿Eso haría algunas declaraciones ambiguas o imposibles?
if
,else
,while
y así sucesivamente. Si hicieras eso, ¿Python seguiría siendo un lenguaje que se pueda usar sin ambigüedad?if .. then .. end
en una sola línea. Entonces aquí en pythonthen
se sustituye por dos cosas a:
y una nueva línea requerida. Uno de estos parece redundante.Respuestas:
Sí, se requieren dos puntos para desambiguar ciertas construcciones. Considere, por ejemplo
if x - y < z: pass
,. Sin los dos puntos no podemos decidir cómo analizar esto sin conocer el contexto de lo que son x, y y z.if x: -y < z...
es válido si x es booleano,if x - y < z:
es válido de lo contrario.Como es una muy buena idea que un lenguaje de programación no requiera que ejecutes una aplicación hasta el punto que estás compilando para poder analizarla, el colon es muy necesario. Podría soltarlo, pero necesitaría otras formas de desambiguar.
fuente
if condition: print("Condition passed")\n
permitido? El\n
simboliza nueva línea después de la declaración de impresión.El colon no es realmente necesario gramaticalmente, si Python hubiera sido diseñado en un mundo diferente, es bastante concebible que el diseñador del lenguaje no decida requerir el colon. Y, de hecho, idiomas como Cobra hacen esto.
La razón principal por la cual se requiere colon en Python es la legibilidad humana. Para citar las preguntas frecuentes de Python :
Como también se menciona en las preguntas frecuentes, los dos puntos también facilitan el procesamiento del código de Python sin analizar completamente el lenguaje. Cualquier procesador de texto que tenga un analizador completo, incluido el compilador de Python, puede prescindir de los dos puntos si no fuera necesario o si se hace opcional cuando no es ambiguo.
fuente
No es necesario para la computadora, sino para los humanos.
Guido van Rossum (creador de Python) tuvo un blog de historia de Python por un tiempo. El colon se introdujo en ABC , la fuente de muchas de las características de Python.
En esta publicación de blog sobre "Karin Dewar, la sangría y el colon" , Guido escribe:
( B aquí es una serie de prototipos de lenguajes B0, B1, ... que condujeron a ABC. No es el lenguaje B el predecesor de C).
También recuerdo que Guido señaló en los años 90 que era para beneficio de los editores , que pueden insertar automáticamente una sangría después de una línea que termina con dos puntos. Pero todavía no he encontrado una fuente para eso.
fuente
La sintaxis del lenguaje de programación Cobra está muy inspirada en Python y elimina el colon, por lo que parece que no es estrictamente necesario. Sin embargo, no es suficiente simplemente eliminar el colon, hay otros cambios en la sintaxis necesaria. Vea, por ejemplo, este código de uno de mis proyectos de juguetes :
Sin los dos puntos para separar el cuerpo de la lista de parámetros, tendría que usar sangría:
Creo que las versiones anteriores de Cobra hicieron que el colon fuera opcional, podría usar sangría o un colon o ambos. Similar a cómo funciona en Ruby, donde hay palabras clave para separar las diferentes partes de las expresiones de control, pero también puede usar separadores de expresión (punto y coma o nueva línea):
En las versiones actuales de Cobra, puede usar una coma:
Se puede escribir como
Necesita alguna forma de separar las diferentes partes de las expresiones o definiciones de control. En Python, ese es el colon. Si quita los dos puntos, debe reemplazarlo con otra cosa, por ejemplo, sangría forzada . Solo quitar el colon no funcionará.
La única forma de estar absolutamente seguro es formalizar la sintaxis con y sin dos puntos y demostrar su no ambigüedad.
Sin embargo, tenga en cuenta que uno de los aforismos del Zen de Python es "explícito es mejor que implícito", por lo que la delineación explícita de bloques con dos puntos parece encajar con la filosofía general de Python. Las preguntas frecuentes sobre diseño e historia también mencionan que esta decisión se basa en evidencia empírica del predecesor de Python, ABC.
fuente