2011-08-06 22 views

Respuesta

6

Quizás esto evite una ambigüedad gramatical, pero creo que este comportamiento está en el espíritu de PEP 20, específicamente 'Simple is better than complex' (entre otros). En otras palabras, 'A menos que tenga una buena razón, ¿por qué las expresiones deben abarcar varias líneas?'. Si tiene una buena razón, se proporcionan los dispositivos de sintaxis para evitar esto.

[editar] he hecho un poco más lectura, y hay algunas referencias de interés:

  • La definición léxica de declaraciones dice que las líneas lógicas terminan en una newline. Cada caso para agregar una continuación implícita se convierte en un caso excepcional.
  • PEP 3125 para Python 3, se propuso eliminar la barra diagonal (\) continuación, pero se rechazó debido a la falta de soporte.
    • Discussion en la lista de correo nos recuerda que la continuación entre paréntesis se produce porque las nuevas líneas no finalizan las declaraciones mientras que los paréntesis permanecen desequilibrados.
    • En ese mismo hilo, Guido se opone al cambio debido a errores como la están disfrazado siguiente:

x = y+ # Used to be y+1, the 1 got dropped 
    f(x) 

Mi punto final es, los actos de barra (o parens abiertas) actúa como un recordatorio de que la declaración continúa en la siguiente línea. Dependiendo de su sangría, es posible que la continuación se pueda confundir con una declaración separada (que creo que esta otra response toca).

+0

+1 explicación plausible, aunque no demasiado convincente. – Mehrdad

+0

Aparte de las anécdotas acerca de que python 'desalentó' este comportamiento, encontré algunas razones funcionales por las que este es el caso. –

+0

Ahhhh el ejemplo 'y +' es genial, eso tiene mucho sentido; ¡Gracias! :) – Mehrdad

4

continuación de línea implícita sólo ocurre en Python si paréntesis, corchetes o llaves están abiertas. Ponga paréntesis alrededor de su condición y funcionará.

+3

Pero, ¿por qué han elegido no hacer una continuación de línea implícita para 'y' y' o' sin paréntesis? ¿Hay una ambigüedad que no veo al hacerlo? –

+0

@kindall: No me gustaría decirlo, pero te perdiste el sentido de mi pregunta. Estaba pidiendo el ** motivo **, no la solución. – Mehrdad

4

Porque "explícito es mejor que implícito"; una continuación de línea no marcada arroja al lector del código (especialmente en un idioma con espacios en blanco sintácticamente significativos), y el código se lee con mucha más frecuencia de lo que está escrito.

+0

Esta es la razón real por la cual. Con un '\\' o un par coincidente como llaves, corchetes o paréntesis, es explícito que la línea no está terminada. – agf

+0

+1 es suficiente. :) – Mehrdad

+0

Creo que esto es a lo que se reduce y otros tipos de continuación no tienen tanto potencial para los problemas. –

Cuestiones relacionadas