443 votos

Python Lambda - ¿por qué?

Yo estoy empezando Python y corrió de cabeza en Lambda - que me tomó un tiempo para averiguar. Es lambda uno de esos 'interesante' lenguaje de los elementos que en la vida real debe ser olvidado? Estoy seguro de que hay algunos casos extremos en que podría ser necesario, pero dada la oscuridad de la misma, el potencial de ser redefinido en futuras versiones (mi hipótesis basada en las varias definiciones de la misma) y la reducción de la codificación de la claridad - debe ser evitado? Esto me recuerda a rebosar (desbordamiento de buffer) de tipos de C - apuntando a la parte superior de la variable y la sobrecarga para el conjunto de los otros valores de campo...una especie de techie el sentido de la teatralidad, sino de mantenimiento de coder pesadilla..

516voto

David Z Puntos 49476

Está hablando acerca de las funciones lambda? Como

f = lambda x: x**2 + 2*x - 5

Esas cosas son en realidad muy útiles. Python soporta un estilo de programación denominado programación funcional donde usted puede pasar funciones a otras funciones para hacer las cosas. Ejemplo:

mult3 = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9])

conjuntos mult3 a [3, 6, 9], los elementos de la lista original que son múltiplos de 3. Este es más corto (y, se podría argumentar, claro) que

def filterfunc(x):
    return x % 3 == 0
mult3 = filter(filterfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9])

Por supuesto, en este caso en particular, podría hacer la misma cosa como una lista de comprensión:

mult3 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x % 3 == 0]

(o, incluso, como range(3,10,3)) pero también hay otros casos, como la construcción de funciones como valores de retorno de otras funciones, donde usted no puede utilizar una lista de comprensión y una función lambda puede ser el camino más corto para escribir algo. Como

def transform(n):
    return lambda x: x + n
f = transform(3)
f(4) # is 7

Yo uso las funciones lambda sobre una base regular. Me tomó un tiempo para acostumbrarse a ellos, pero una vez que lo hice me alegro de Python dispone de ellos ;-)

112voto

user251650 Puntos 371

lambda es sólo una forma elegante de decir function. Distinta de su nombre, no hay nada que ocultar, intimidar o críptico al respecto. Al leer la línea siguiente, reemplace lambda por function en tu mente:

>>> f = lambda x: x + 1
>>> f(3)
4

Se define una función de x. Algunas otras lenguas, como R, lo dicen explícitamente:

> f = function(x) { x + 1 }
> f(3)
4

Ves? Es una de las cosas más naturales para hacer en la programación.

63voto

egaga Puntos 5367

Una expresión lambda es parte de un importante mecanismo de abstracción que trata con funciones de orden mayor. Para obtener una comprensión adecuada de su valor, por favor ver en alta calidad de lecciones de Abelson y Sussman, y leer el libro SICP

Estos son los temas relevantes en la moderna empresa de software, y cada vez más popular.

60voto

John Fouhy Puntos 14700

Los dos de la línea de resumen:

  1. Cierres: Muy útil. Aprende de ellos, el uso de ellos, el amor de ellos.
  2. Python lambda de palabras clave: innecesario, ocasionalmente útil. Si usted se encuentra haciendo algo remotamente complejo con él, guardarlo y definir una función real.

42voto

rhettg Puntos 1452

Dudo lambda va a desaparecer. Ver Guido post acerca de finalmente dejando de tratar de quitar. También ver un esquema del conflicto.

Usted podría echa un vistazo a este post para más de una historia sobre el trato detrás de Python características funcionales: http://python-history.blogspot.com/2009/04/origins-of-pythons-functional-features.html

Curiosamente, el mapa, el filtro, y reducir las funciones que originalmente motivó la introducción de lambda y otras características funcionales en gran medida sido sustituida por la lista de comprensión y generador de expresiones. De hecho, la reducción de la función eliminado de la lista de funciones integradas en Python 3.0. (Sin embargo, no es necesario enviar las quejas acerca de la eliminación de lambda, mapa o filtro: en el que se alojen. :-)

Mis dos centavos: Rara vez es el lambda de la pena en cuanto a claridad va. En general, no hay una forma más clara solución que no incluya lambda.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X