Funciones Lambda?

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Funciones Lambda?

Notapor Nato » Sab May 03, 2008 8:27 pm

He estado buscando información acerca de que son las funciones lambda, pero no me ha aclarado nada, no entiendo lo que dicen, es un poco lioso, alguien me lo explica de forma sencilla? yo lo quiero saber para Python ya que he visto que también están en Lisp, no se si difieren en algo, pero lo aclaro por si acaso.
Imagen
Avatar de Usuario
Nato
 
Mensajes: 26
Registrado: Sab Jul 21, 2007 11:11 am
Ubicación: Las Palmas, España

Notapor Mindro » Dom May 04, 2008 1:40 pm

En general, una función lambda es una función que toma cualquier número de argumentos (incluso argumentos opcionales) y devuelve el valor de una expresión simple. Las funciones lambda no pueden contener órdenes, y no pueden contener tampoco más de una expresión. No intente exprimir demasiado una función lambda; si necesita algo más complejo, defina en su lugar una función normal y hágala tan larga como quiera.


Sacado de http://es.diveintopython.org/apihelper_lambda.html
Avatar de Usuario
Mindro
 
Mensajes: 6
Registrado: Sab Mar 08, 2008 4:44 pm
Ubicación: Cádiz - España

Notapor Nato » Dom May 04, 2008 1:48 pm

Gracias Mindro, pero ya había leído eso, y no sea que se refiere en lo de "no puede contener ordenes y ni más de una expresión", ahí específicamente esta mi duda, también me gustaría que me dijerais, porque usar una función lambda y no una normal.

EDIT

Se me olvidaba, en Ubuntu siempre tengo que poner la dirección completa de un archivo externo? es que si por ejemplo tengo un archivo python que llama a una imagen en el mismo directorio, no me basta solo con poner el nombre de la imagen, si no que tengo que poner toda la ruta hasta la imagen.
Imagen
Avatar de Usuario
Nato
 
Mensajes: 26
Registrado: Sab Jul 21, 2007 11:11 am
Ubicación: Las Palmas, España

Notapor hugoruscitti » Dom May 04, 2008 11:12 pm

Nato escribió:Gracias Mindro, pero ya había leído eso, y no sea que se refiere en lo de "no puede contener ordenes y ni más de una expresión", ahí específicamente esta mi duda, también me gustaría que me dijerais, porque usar una función lambda y no una normal.


Como seguramente has observado, el concepto de funciones lambda es bastante
importante para muchos lenguajes... pero en Python el concepto de función
lambda no es tan crucial; lambda se utiliza en Python principalmente para
definir funciones en una sola linea y sin nombre. Un atajo ideal para
casos donde no necesitas re-utilizar código.

Te doy un ejemplo: Imagina que tienes un conjunto de números en una lista,
pero solo deseas conoces los números pares de esa lista. Una forma de
seleccionarlos es mediante la función "filter" y una función tradicional:

Código: Seleccionar todo
def es_par(x):
    return x % 2 == 0

numeros = [1, 2, 3, 4, 5, 6]
print filter(es_par, numeros)


pero, ¿como hacer esto con una función lambda?:

Código: Seleccionar todo
numeros = [1, 2, 3, 4, 5, 6]

print filter(lambda x: x % 2 == 0, numeros)


en muchos casos esta segunda forma es la preferida solo por comodidad, ese
es el motivo para usar funciones 'lambda' en python, una cuestión de
comodidad.

Ten en cuenta que en Python esta contrucción lambda es muy
simple, no permite anidar condiciones "if" o similares.

Saludos.

pd: en el ejemplo anterior se podría usar una lista por comprensión, pero me
ha parecido mas ilustrativo usar 'filter'.


Nato escribió:EDIT

Se me olvidaba, en Ubuntu siempre tengo que poner la dirección completa de un archivo externo? es que si por ejemplo tengo un archivo python que llama a una imagen en el mismo directorio, no me basta solo con poner el nombre de la imagen, si no que tengo que poner toda la ruta hasta la imagen.


no, debería funcionar correctamente de las dos formas. Tanto
en Ubuntu como en cualquier otro GNU/Linux. Sería bueno que
generes un nuevo mensaje con tu consulta y un programa de
ejemplo, seguramente el problema esté en otro lado.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor Nato » Lun May 05, 2008 7:39 pm

Muchas gracias, ahora entiendo, entonces, solo es por comodidad, aunque no veo que te ahora demasiadas molestias la verdad.
Imagen
Avatar de Usuario
Nato
 
Mensajes: 26
Registrado: Sab Jul 21, 2007 11:11 am
Ubicación: Las Palmas, España


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron