¿Cuál es el propósito de los dos puntos antes de un bloque en Python?

¿Cuál es el propósito de los dos puntos antes de un bloque en Python?

Ejemplo:

if n == 0: print "The end" 

Los dos puntos están allí para declarar el inicio de un bloque con sangría.

Técnicamente, no es necesario; Usted podría simplemente sangrar y anular la sangría cuando el bloque esté terminado. Sin embargo, según el koan de Python, “explícito es mejor que implícito” (EIBTI), creo que Guido deliberadamente hizo que el colon fuera obligatorio, por lo que cualquier statement que deba ir seguida de un código sangrado termina en un colon. (También permite líneas de una línea si continúa después de los dos puntos, pero este estilo no se usa ampliamente).

También facilita el trabajo de los editores de sangría automática que tienen en cuenta la syntax, lo que también cuenta en la decisión.


Esta pregunta resulta ser una FAQ de Python , y encontré una de sus respuestas de Guido aquí :

¿Por qué se requieren dos puntos para las declaraciones if / while / def / class?

El colon se requiere principalmente para mejorar la legibilidad (uno de los resultados del lenguaje experimental ABC). Considera esto:

 if a == b print a 

versus

 if a == b: print a 

Observe cómo el segundo es un poco más fácil de leer. Observe además cómo un signo de dos puntos desencadena el ejemplo en esta respuesta de Preguntas frecuentes; Es un uso estándar en inglés.

Otra razón menor es que los dos puntos facilitan la tarea de los editores con resaltado de syntax; pueden buscar dos puntos para decidir cuándo se debe boost la sangría en lugar de tener que hacer un análisis más elaborado del texto del progtwig.

Considere la siguiente lista de cosas para comprar en el supermercado, escritas en pewprikanese.

 pewkah lalala chunkykachoo pewpewpew skunkybacon 

Cuando leo eso, estoy confundido, ¿Son el chunkykachoo y el pewpew una especie de lalala? ¿O qué pasa si chunkykachoo y pewpewpew están sangrados solo porque son elementos especiales?

Ahora vea qué sucede cuando mi amigo pewprikanés agrega dos puntos para ayudarme a analizar mejor la lista: (<- como este)

 pewkah lalala: (<-- see this colon) chunkykachoo pewpewpew skunkybacon 

Ahora está claro que chunkykachoo y pewpewpew son una especie de lalala.

Digamos que hay una persona que está empezando a aprender Python, que es su primer lenguaje de progtwigción para aprender. Sin los dos puntos, existe una probabilidad considerable de que ella siga pensando "estas líneas están sangradas porque estas líneas son como elementos especiales", y podría tomar un tiempo darse cuenta de que esa no es la mejor manera de pensar acerca de la sangría.

Tres razones:

  1. Para boost la legibilidad. Los dos puntos ayudan al flujo de código en el siguiente bloque con sangría.
  2. Para ayudar a los editores de texto / IDE, pueden sangrar automáticamente la siguiente línea si la línea anterior termina con dos puntos.
  3. Para hacer el análisis por python un poco más fácil.

Que yo sepa, es un diseño intencional para hacerlo más obvio, que el lector debe esperar una muesca después del colon.

También hace posibles construcciones como esta:

 if expression: action() code_continues() 

Tenga en cuenta (como lo hizo un comentarista) que este no es exactamente el shiny estándar dorado de un buen estilo Python. Sería mucho mejor tener un espacio en blanco, allí:

 if expression: action() code_continues() 

para evitar confusión. Solo quería dejar en claro, con el primer ejemplo, que es posible escribir así, ya que tener el código para el seguimiento inmediato de los dos puntos hace posible que el comstackdor entienda que la siguiente línea no debe estar sangrada.

Según Guido Van Rossum, el inventor de Python, la idea de usar dos puntos para hacer que la estructura sea más aparente está inspirada en experimentos anteriores con un predecesor de Python, el lenguaje ABC, que también estaba dirigido a los principiantes. Al parecer, en sus primeras pruebas, los principiantes progresaron más rápido con dos puntos que sin él. Lea la historia completa en el blog de historia de Python de Guido.

http://python-history.blogspot.com/2009/02/early-language-design-and-development.html

Y sí, el colon es útil en una sola línea y es menos molesto que el punto y coma. También es una guía de estilo para un largo tiempo recomendado para el descanso en varias líneas solo cuando termina con un operador binario

 x = (23 + 24 + 33) 

La adición de dos puntos hizo que la statement compuesta se vea de la misma manera para una mayor uniformidad de estilo.

Existe una encoding ‘sin colon’ para el CPython, así como un dialecto sin colon, llamado cobra. Los que no recogieron.