Introducción
Las funciones anónimas en Python se llaman funciones lambda. Son una forma de crear funciones sin nombre. Son útiles para crear funciones cortas que se utilizan solo una vez.
This tutorial is from open-source community. Access the source code
💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí
Las funciones anónimas en Python se llaman funciones lambda. Son una forma de crear funciones sin nombre. Son útiles para crear funciones cortas que se utilizan solo una vez.
Las listas se pueden clasificar in-place. Utilizando el método sort
.
s = [10,1,7,3]
s.sort() ## s = [1,3,7,10]
Puedes clasificar en orden inverso.
s = [10,1,7,3]
s.sort(reverse=True) ## s = [10,7,3,1]
Parece bastante simple. Sin embargo, ¿cómo clasificamos una lista de diccionarios?
[{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'MSFT', 'price': 65.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100}]
¿Por qué criterio?
Puedes guiar la clasificación utilizando una función clave. La función clave es una función que recibe el diccionario y devuelve el valor de interés para la clasificación.
portfolio = [
{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'MSFT', 'price': 65.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100}
]
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
Aquí está el resultado.
## Comprueba cómo se clasifican los diccionarios por la clave `name`
[
{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'MSFT', 'price': 65.1,'shares': 50}
]
En el ejemplo anterior, la función clave es un ejemplo de función de devolución de llamada. El método sort()
"devuelve la llamada" a una función que proporcionas. Las funciones de devolución de llamada suelen ser funciones de una sola línea cortas que se utilizan solo para esa operación. A menudo, los programadores piden un atajo para especificar este procesamiento adicional.
Utiliza una función lambda en lugar de crear la función. En nuestro ejemplo de clasificación anterior.
portfolio.sort(key=lambda s: s['name'])
Esto crea una función sin nombre que evalúa una única expresión. El código anterior es mucho más corto que el código inicial.
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
## vs lambda
portfolio.sort(key=lambda s: s['name'])
if
, while
, etc.sort()
.Lee algunos datos de un portafolio de acciones y conviértelos en una lista:
>>> import report
>>> portfolio = list(report.read_portfolio('portfolio.csv'))
>>> for s in portfolio:
print(s)
Stock('AA', 100, 32.2)
Stock('IBM', 50, 91.1)
Stock('CAT', 150, 83.44)
Stock('MSFT', 200, 51.23)
Stock('GE', 95, 40.37)
Stock('MSFT', 50, 65.1)
Stock('IBM', 100, 70.44)
>>>
Prueba las siguientes declaraciones que clasifican los datos del portafolio alfabéticamente por nombre de acción.
>>> def stock_name(s):
return s.name
>>> portfolio.sort(key=stock_name)
>>> for s in portfolio:
print(s)
... inspecciona el resultado...
>>>
En esta parte, la función stock_name()
extrae el nombre de una acción de una sola entrada en la lista portfolio
. sort()
utiliza el resultado de esta función para hacer la comparación.
Prueba a clasificar el portafolio según el número de acciones utilizando una expresión lambda
:
>>> portfolio.sort(key=lambda s: s.shares)
>>> for s in portfolio:
print(s)
... inspecciona el resultado...
>>>
Prueba a clasificar el portafolio según el precio de cada acción
>>> portfolio.sort(key=lambda s: s.price)
>>> for s in portfolio:
print(s)
... inspecciona el resultado...
>>>
Nota: lambda
es un atajo útil porque te permite definir una función de procesamiento especial directamente en la llamada a sort()
en lugar de tener que definir una función separada primero.
¡Felicitaciones! Has completado el laboratorio de Funciones Anónimas y Lambda. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.