Sin Lambda multilínea en Python: ¿por qué no?

Resuelto Imagist asked hace 15 años • 24 respuestas

He oído decir que no se pueden agregar lambdas multilínea en Python porque chocarían sintácticamente con las otras construcciones de sintaxis en Python. Hoy estaba pensando en esto en el autobús y me di cuenta de que no podía pensar en una sola construcción de Python con la que chocaran las lambdas multilínea. Dado que conozco bastante bien el idioma, esto me sorprendió.

Ahora, estoy seguro de que Guido tenía una razón para no incluir lambdas multilínea en el lenguaje, pero por curiosidad: ¿cuál es una situación en la que incluir una lambda multilínea sería ambiguo? ¿Es cierto lo que he oído o hay alguna otra razón por la que Python no permite lambdas multilínea?

Imagist avatar Aug 05 '09 21:08 Imagist
Aceptado

Guido van Rossum (el inventor de Python) responde él mismo a esta pregunta exacta en una antigua publicación de blog .
Básicamente, admite que es teóricamente posible, pero que cualquier solución propuesta no sería Pythonic:

"Pero para mí la complejidad de cualquier solución propuesta para este rompecabezas es inmensa: requiere que el analizador (o más precisamente, el lexer) pueda alternar entre modos sensibles a sangría y no sensibles a sangría, manteniendo una pila de modos anteriores y nivel de sangría. Técnicamente, todo eso se puede resolver (ya hay una pila de niveles de sangría que podrían generalizarse). Pero nada de eso me quita la sensación de que todo es un elaborado artilugio de Rube Goldberg .

Eli Courtwright avatar Aug 05 '2009 14:08 Eli Courtwright

Mira lo siguiente:

map(multilambda x:
      y=x+1
      return y
   , [1,2,3])

¿Es este un retorno lambda (y, [1,2,3])(por lo tanto, el mapa solo obtiene un parámetro, lo que genera un error)? ¿O regresa y? ¿O es un error de sintaxis porque la coma en la nueva línea está mal colocada? ¿Cómo sabría Python lo que quieres?

Dentro de los pares, la sangría no le importa a Python, por lo que no se puede trabajar sin ambigüedades con líneas múltiples.

Esto es simple, probablemente haya más ejemplos.

balpha avatar Aug 05 '2009 14:08 balpha