Sunteți pe pagina 1din 8

Mtro.

René Peña Martínez

Lambda

Lambda es una letra del alfabeto griego que suele ser utilizada
para representar distintos conceptos en diversas áreas del
conocimiento.

Lambda (Λ λ) es la undécima letra del alfabeto griego y se utiliza para


representar conceptos relacionados con distintas disciplinas El
símbolo de lambda, puede ser: Λ o λ.

En economía esta letra del alfabeto griego se suele utilizar para


designar a los llamados multiplicadores de la función de Lagrange.
Esta función se utiliza en economía para resolver problemas de
optimización sujetos a restricciones. Así, por ejemplo, encontrar la
máxima utilidad del consumidor sujeto a una restricción de
presupuesto o la máxima producción de una empresa, sujeta a que el
coste sea el mínimo posible.

El creador de la función de Lagrange fue Joseph-Louis Lagrange


(Turín, 1736 – París, 1813). Publicó por primera vez esta técnica se
solución con restricciones en el tratado llamado «Méchanique
Analitique».

Su significado en finanzas es el cambio en el precio de una opción


debido al cambio de un 1% de la volatilidad implícita del precio del
activo subyacente. Esta última se calcula como la desviación típica del
cambio de precio en porcentaje anual compuesto continuamente.

En otras disciplinas Suele designar a ángulos, planos y otras formas


en matemáticas. Longitud de ondas en física o lenguaje de
programación en informáticas.

En el ámbito de la programación, una expresión lambda (también


denominada función lambda, función literal o función anónima) es
una subrutina definida que no está enlazada a un identificador.

Las expresiones lambda generalmente se utilizan:

1
Mtro. René Peña Martínez

 Como argumentos que son pasados a otras funciones de orden


superior
 Para construir el resultado de una función de orden superior que
necesita retornar una función.

Las funciones lambda se originaron debido al trabajo de Alonzo


Church en su cálculo lambda en 1936, antes de la invención de las
computadoras electrónicas, en cual todas las funciones eran anónimas

En varios lenguajes de programación, las funciones anónimas son


introducidas bajo el nombre lambda y generalmente también son
referidas como lambdas y abstracciones lambda. Las funciones
anónimas han sido un aspecto integrado de los lenguajes de
programación desde el origen del lenguaje Lisp en 1958, y un número
creciente de lenguajes de programación admite funciones anónimas.

Una función anónima, como su nombre indica es una función sin


nombre. ¿Es posible ejecutar una función sin referenciar un nombre?
Pues sí, en Python podemos ejecutar una función sin definirla con def.
De hecho son similares pero con una diferencia fundamental:
El contenido de una función lambda debe ser una única expresión
en lugar de un bloque de acciones.
Una función en su sentido más trivial significa realizar algo sobre algo.
Por tanto, podríamos decir que, mientras las funciones anónimas
lambda sirven para realizar funciones simples, las funciones definidas
con def sirven para manejar tareas más extensas.

Ejemplos en Python:

Código
def doblar(num):
2
Mtro. René Peña Martínez

resultado = num*2
return resultado

doblar(2)

Vamos a simplificar el código un poco:

def doblar(num):
return num*2

Todavía más, podemos escribirlo todo en una sola línea:

def doblar(num): return num*2

Esta notación simple es la que una función lambda intenta replicar,


fijaros, vamos a convertir la función en una función anónima:

Código
lambda num: num*2

Aquí tenemos una función anónima con una entrada que recibe num,
y una salida que devuelve num * 2.

Lo único que necesitamos hacer para utilizarla es guardarla en una


variable y utilizarla tal como haríamos con una función normal:

Código
doblar = lambda num: num*2

doblar(2)

Gracias a la flexibilidad de Python podemos implementar infinitas


funciones simples.

Por ejemplo comprobar si un número es impar:

Código
impar = lambda num: num%2 != 0

3
Mtro. René Peña Martínez

impar(5)

Darle la vuelta a una cadena utilizando slicing:

Código
revertir = lambda cadena: cadena[::-1]

revertir("Hola")

Incluso podemos enviar varios valores, por ejemplo para sumar dos
números:

Código
sumar = lambda x,y: x+y

sumar(5,2)

Podemos realizar cualquier cosa que se nos ocurra, siempre que lo


podamos definir en una sola expresión.

Función filter()

filter significa filtrar, a partir de una lista o iterador y una función


condicional, es capaz de devolver una nueva colección con los
elementos filtrados que cumplan la condición.

def multiple(numero): # Primero declaramos una función condicional


if numero % 5 == 0: # Comprobamos si un numero es múltiple de
cinco
return True # Sólo devolvemos True si lo es

numeros = [2, 5, 10, 23, 50, 33]

filter(multiple, numeros)
Si ejecutamos el filtro obtenemos un objeto de tipo filtro, pero podemos
transformarlo en una lista fácilmente haciendo un cast (conversión):
4
Mtro. René Peña Martínez

list( filter(multiple, numeros) )

Por tanto cuando utilizamos la función filter() tenemos que enviar una
función condicional, pero no es necesario definirla, podemos utlizar
una función anónima lambda:
list( filter(lambda numero: numero%5 == 0, numeros) )

Así, en una sola línea hemos definido y ejecutado el filtro utilizando


una función condicional anónima y una lista de numeros.

El verdadero potencial de filter() sale a relucir cuando necesitamos


filtrar varios objetos de una lista.

Por ejemplo, dada una lista con varias personas, nos gustaría filtrar
únicamente las que son menores de edad:

class Persona:

def __init__(self, nombre, edad):


self.nombre = nombre
self.edad = edad

def __str__(self):
return "{} de {} años".format(self.nombre, self.edad)

personas = [
Persona("Juan", 35),
Persona("Marta", 16),
Persona("Manuel", 78),
Persona("Eduardo", 12)
]

Para hacerlo nos vamos a servir de una función lambda, comprobando


el campo edad para cada persona:
5
Mtro. René Peña Martínez

menores = filter(lambda persona: persona.edad < 18, personas)


for menor in menores:
print(menor)

Función map()

Esta función trabaja de una forma muy similar a filter(), con la


diferencia que en lugar de aplicar una condición a un elemento de una
lista o secuencia, aplica una función sobre todos los elementos y como
resultado se devuelve un iterable de tipo map:

def doblar(numero):
return numero*2

numeros = [2, 5, 10, 23, 50, 33]

map(doblar, numeros)

Podemos transformar este iterable en una lista:


list(map(doblar, numeros))

Y podemos simplificarlo con una función lambda para substituir la


llamada de una función definida:
list( map(lambda x: x*2, numeros) )

La función map() se utiliza mucho junto a expresiones lambda ya que


permite ahorrarnos el esfuerzo de crear bucles for.

Además se puede utilizar sobre más de un iterable con la condición


que tengan la misma longitud.

6
Mtro. René Peña Martínez

Por ejemplo si queremos multiplicar los números de dos listas:

a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]

list( map(lambda x,y : x*y, a,b) )

Mapeando objetos

Evidentemente, siempre que la utilicemos correctamente podemos


mapear una serie de objetos sin ningún problema:

def incrementar(p):
p.edad += 1
return p

personas = map(incrementar, personas)

for persona in personas:


print(persona)

este caso tenemos que utilizar una función definida porque no


necesitamos actuar sobre la instancia, a no ser que nos tomemos la
molestia de rehacer todo el objeto:

personas = [
Persona("Juan", 35),
Persona("Marta", 16),
Persona("Manuel", 78),
Persona("Eduardo", 12)
]

personas = map(lambda p: Persona(p.nombre, p.edad+1), personas)

for persona in personas:


print(persona)

En Haskell:

λ se escribe \ y → se escribe ->;


7
Mtro. René Peña Martínez

Ejemplo:

doble = \x -> x + x

Las funciones pueden construirse sin nombrarlas mediante las expresiones


lambda. Ejemplo de evaluación de expresiones lambda:

Ejemplo2

(\x -> x+x) 3

Ejemplo3

--cuentaLoca es una función que recibe 3 parámetros


cuentaLoca = (\x y z -> x * 2 - y + 10 * z)

ejemplo que filtra todos los números pares que son mayores que diez de una lista
dada:

ghci> filter (\ x -> even x && x > 10) [1..20]

ejemplo que atraviesa una lista y para cada elemento x calcula el término x ^ 2 x:

ghci> map (\ x -> x^2 + x) [1..10]

Uso de las expresiones lambda en funciones con sólo un uso:


(impares n) es la lista de los n primeros números impares.
Definición sin lambda:
impares n = map f [0..n-1] where f x = 2*x+1
Definición con lambda:
impares n = map (\x -> 2*x+1) [0..n-1]

S-ar putea să vă placă și