[Hilo Oficial] Esto también es otro arte...el ARTE de programar
Cita
Hola, te pongo unos ejemplillos:

Las funciones lambda siguen la siguiente sintaxis básica:


Código:
lambda lista_de_parámetros : valor de retorno


Por ejemplo:


Código:
multiplica = lambda a, b: a * b

multiplica(2, 5) -> devuelve 10


Su propósito en la vida es coger un valor y devolver otro sin alterar el estado del objeto que recibe como parámetro.

Python viene de serie con un conjunto de funciones que aceptan objetos iterables y funciones ( que pueden ser lambda, funciones normales, o cualquier objeto que se puede "llamar" con () ):

Por ejemplo la función map, aplica a cada elemento de una lista u objeto iterable una función:


Código:
lista = [1, 2, 3, 4, 5, 6, 7]

def dobla(a):
    return a * 2

map(dobla, lista) -> evalua a [2, 4, 6, 8, 10, 12, 14]


Ahora lo mismo pero esta vez con funciones lambda:


Código:
map(lambda a : a * 2, lista) -> evalua a  [2, 4, 6, 8, 10, 12, 14]


La lista permanece intacta, map genera un nuevo objeto iterable que se puede combinar en otras expresiones.

Dentro de un función lambda, está permitido utilizar if en su expresión ternaria:


Código:
mayorque10 = lambda n : True if n > 10 else False

mayorque10(100) -> True
mayorque10(9) -> False


Un ejemplo un poco más complejo de funciones lambda sería el siguiente, por ejemplo como implementar la propia función map:


Código:
_map = lambda funcion, lista : [funcion(lista[0])] + _map(funcion, lista[1:]) if len(lista) > 1 else [funcion(lista[0])]


Es decir, aplicamos la función a elemento 0 de la lista, metemos ese valor dentro de una nueva lista:

[funcion(lista[0])]

y si todavía queda más de un elemento en la lista, llamamos de forma recursiva a _map con el resto de la lista _map(funcion, lista[1:]),
la sublistas se concatenan y al final obtiene lista final.

Volviendo a tu ejemplo, la función max devuelve el valor máximo de una lista:


Código:
lista = [0, 10, 15]
max(lista) -> 15


max acepta otro argumento, key,  si max no recibe key, la key de cada elemento de la lista es el propio valor del elemento y max
se basa en la key para determinar cual es el elemento mayor.


Código:
Elemento   Key
0,         0
10,        10
15         15


Ahora bien, si por ejemplo, le pasamos la siguiente expresión lambda como key


Código:
max(lista, key=lambda a : 100 if a == 0 else a) -> evalua a 0

Lo que hace es aplicar a cada elemento de la lista la función lambda para obtener la key:



Código:
Elemento   Key
0,         100
10,        10
15         15


Ahora la key máxima es 100, que pertenece al elemento 0. Por lo tanto devuelve 0.


Mensajes en este tema
Re:Esto también es otro arte...el ARTE de programar - por Juntacadaveres - 25-10-2012 15:34
Re:Esto también es otro arte...el ARTE de programar - por Corona Radiata - 27-10-2012 03:00
RE: Esto también es otro arte...el ARTE de programar - por Margaruga - 15-10-2015 18:43
Re:Esto también es otro arte...el ARTE de programar - por Juntacadaveres - 24-10-2012 16:47

Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)