Las funciones de Python son muy flexibles.
En particular
Daremos ejemplos de lo sencillo que es pasar una función a una función en las secciones siguientes.
lambda
¶Paradigma de programación funcional.
La palabra clave lambda
se utiliza para crear funciones sencillas en una sola línea.
Por ejemplo, las definiciones
def cubo(x):
return x**3
y
f = lambda x: x**3
son totalmente equivalentes.
Para ver por qué lambda
es útil, supongamos que queremos calcular $ \int_0^2 x^3 dx $ (y hemos olvidado nuestro cálculo de secundaria).
La librería SciPy tiene una función llamada quad
que hará este cálculo por nosotros.
La sintaxis de la función quad
es quad(f, a, b)
donde f
es una función y a
y b
son números.
Para crear la función $f(x) = x^3$ podemos usar lambda
como sigue
are entirely equivalent.
from scipy.integrate import quad
quad(lambda x: x**3, 0, 2)
quad(cubo, 0, 2)
Aquí se dice que la función creada por lambda
es anónima, i.e., anonymous, porque nunca se le dio un nombre.
Algunos usos frequentes de una lambda function
list1 = ([('elefante', 5.25),
('abeja', 9.70), ('caballo', 1.10)])
list1.sort(key = lambda x: x[0])
print(list1)
list1 = ([('elefante', 5.25),
('abeja', 9.70), ('caballo', 1.10)])
def primero_lista(l):
return l[1]
list1.sort(key = primero_lista)
print(list1)
# Filtrando una lista
list1 = [1, 2, 3, 4, 5, 6]
list2 = list(filter(lambda x: x%2 == 0, list1))
print(list2)
Hacer lo mismo con una función
def pares(x):
y = x % 2
if y == 0:
return x
list1 = [1, 2, 3, 4, 5, 6]
list2 = list(filter(pares, list1))
print(list2)
Ejemplo en Pandas
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), columns=['a', 'b', 'c'])
df
df[df.apply(lambda x: x['b'] > x['c'], axis=1)]
df["d"] = df["c"].apply(lambda x: (x - df["c"].mean())/df["c"].std())
df
df["d"].std()
## Maps
list1 = [1, 2, 3, 4, 5, 6]
list2 = list(map(lambda x: x ** 2, list1))
print(list2)
Lambda con condicionales
starts_with_J = lambda x: True if x.startswith('J') else False
print(starts_with_J('Joey'))
wordb4 = lambda s, w: s.split()[s.split().index(w)-1] if w in s else None
sentence = 'Four score and seven years ago'
print(wordb4(sentence, 'and'))
a : int = round(23.4)
a
import datetime
now = datetime.datetime.now()
print(now)
year = lambda x: x.year
print(year(now))