¿Para qué son útiles las lambdas? [cerrado]

Resuelto meade asked hace 15 años • 26 respuestas

Estoy intentando descubrir las lambdas de Python. ¿Es lambdauno de esos elementos lingüísticos "interesantes" que en la vida real deberían olvidarse?

Estoy seguro de que hay algunos casos extremos en los que podría ser necesario, pero dada su oscuridad, la posibilidad de que se redefina en futuras versiones (mi suposición se basa en las diversas definiciones) y la claridad de codificación reducida, ¿debería ser así? ¿Se debe evitar?

Esto me recuerda al desbordamiento (desbordamiento del búfer) de los tipos C: apuntar a la variable superior y sobrecargar para establecer los otros valores de campo. Se siente como una especie de espectáculo tecnológico pero una pesadilla para el codificador de mantenimiento.

meade avatar May 21 '09 03:05 meade
Aceptado

¿ Estás hablando de expresiones lambda ? Como

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

Esas cosas son realmente bastante útiles. Python admite un estilo de programación llamado programación funcional donde puedes pasar funciones a otras funciones para hacer cosas. Ejemplo:

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

establece mult3en [3, 6, 9], aquellos elementos de la lista original que son múltiplos de 3. Esto es más corto (y, se podría argumentar, más 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 particular, podrías hacer lo mismo que una lista por 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 hay muchos otros casos de uso más sofisticados en los que no se puede utilizar una lista de comprensión y una función lambda puede ser la forma más corta de escribir algo.

  • Devolver una función de otra función

      >>> def transform(n):
      ...     return lambda x: x + n
      ...
      >>> f = transform(3)
      >>> f(4)
      7
    

    Esto se usa a menudo para crear contenedores de funciones, como los decoradores de Python.

  • Combinando elementos de una secuencia iterable conreduce()

      >>> reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])
      '1, 2, 3, 4, 5, 6, 7, 8, 9'
    
  • Ordenar por una clave alternativa

      >>> sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
      [5, 4, 6, 3, 7, 2, 8, 1, 9]
    

Utilizo funciones lambda con regularidad. Me tomó un tiempo acostumbrarme a ellos, pero finalmente llegué a comprender que son una parte muy valiosa del idioma.

David Z avatar May 20 '2009 20:05 David Z

lambdaes sólo una forma elegante de decir function. Aparte de su nombre, no hay nada oscuro, intimidante o críptico en él. Cuando leas la siguiente línea, reemplázala lambdapor functionen tu mente:

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

Simplemente define una función de x. Algunos otros idiomas, como R, lo dicen explícitamente:

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

¿Verás? Es una de las cosas más naturales que se pueden hacer en programación.

user251650 avatar Jan 16 '2010 15:01 user251650