Anuncios

Bienvenidos sean a este post, hoy veremos dos formas de trabajo de las funciones.

Anuncios

Funciones recursivas

Cuando hablamos de recursivas nos referimos a una funcion que se llama a si misma para producir un resultado, esta forma de trabajo puede ser muy utiles para escribir algunos algoritmos pero no para todos, tampoco hay una funcion recursiva que no puede ser reescrita por un estilo iterativo, por esta razon siempre quedara a criterio del programador, por lo general el cuerpo de una funcion recursiva se compone de dos partes:

  • La parte base
  • La parte recursiva
Anuncios

Vamos a analizar a tomar el ejemplo del post anterior y lo haremos de la siguiente manera:

>>> def factoreo(n) :
...     if n in (0,1) :
...             return 1
...     return factoreo(n - 1) * n
... 
>>>
Anuncios

En este ejemplo la parte base seria el condicional donde devuelve los valores para los casos de valores de 0 y 1 ya que esta sera la parte encargada de terminar con la recursion, en cambio la parte recursiva va a ser la de return donde se llama a si misma pero le resta un valor a n, como dijimos volvera a llamar hasta que en un punto el condicional se cumpla y proceda a devolver el valor de la recursion, probemos de ejecutarlo:

>>> print(factoreo(5))
120
>>> print(factoreo(3))
6
>>> print(factoreo(1))
1
>>>
Anuncios

Como podemos ver la funcion se ejecuto correctamente, si se preguntan como es esta brujeria tiene una pequeña explicacion, en realidad cuando hacemos el return lo que estamos haciendo es algo similar a esto:

(4 * 3 * 2 * 1) * 5
Anuncios

Este seria el primer caso, donde por cada vuelta va agregando la resta del numero anterior, recuerden que esta forma de usarlo es muy utilizada pero no siempre es util porque muchas veces sera preferible usar iteraciones como hicimos antes, pasemos al siguiente tema.

Anuncios

Funciones anonimas

Estas funciones en realidad para python son llamadas lambdas, estas se utilizan cuando no necesitamos utilizar una funcion sino solamente una linea de codigo para realizar la misma tarea, para entender el concepto veamos el siguiente ejemplo:

>>> def numeros_impares(n) :
...     return n % 2
... 
>>> def get_numeros_impares(n) :
...     return list(filter(numeros_impares, range(n)))
... 
>>>
Anuncios

En este caso creamos dos funciones, una para determinar si el numero es impar, para este caso le decimos que devuelva el valor de usar el operador de modulo del valor informado (n) por dos, si es un numero par nos devolvera 0 y por lo tanto es igual a False por lo tanto no devuelve nada, la siguiente funcion recibira el valor que usaremos de limite, luego devolveremos una lista y por medio de filter le diremos que llame a la funcion anterior pero le enviaremos un rango establecido por el valor informado en n, pasemos a probar la segunda funcion de la siguiente forma:

>>> print(get_numeros_impares(10))
[1, 3, 5, 7, 9]
>>> print(get_numeros_impares(20))
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
>>>
Anuncios

En este caso podemos ver como funciono perfectamente donde siempre nos devuelve una lista con todos los numeros impares en el rango que generamos pero esto podemos reemplazarlo de la siguiente manera:

>>> def get_numeros_impares(n) :
...     return list(filter(lambda m: m % 2, range(n)))
... 
>>>
Anuncios

Observen que no definimos la funcion encargada de verificar los numeros impares sino que usamos la palabra lambda seguida de una variable y esa variable es la que usamos para hacer el mismo calculo de antes, probemos un ejemplo para ver como funciona:

>>> print(get_numeros_impares(10))
[1, 3, 5, 7, 9]
>>>
Anuncios

Como pueden ver funciono de la misma forma, esto gracias a que lambda toma un rol para poder efectuar la misma operacion que una funcion por eso se lo denomina como funcion anomina dado que no tiene un identificador, su sintaxis en general es:

lambda var1, var2, ..., varN : instrucciones
Anuncios

En este caso siempre va la palabra lambda primero luego pasamos todas las variables que necesitemos como argumentos (tampoco deben ser demasiados) pero pueden usar varios, despues las instrucciones que deben ser simples como la obtencion del modulo que hicimos y estas deben estar siempre detras de los dos puntos, las instrucciones que pasemos siempre estaran relacionados a return, veamos otro ejemplo:

def a_mayusculas(p) :
    return p.upper()
Anuncios

Esto recibe una cadena y la transforma en mayusculas vamos a transformarlo con lambda:

>>> a_mayusculas = lambda p: p.upper()
Anuncios

Como pueden ver simplemente creamos una variable a la cual le pasamos el lambda con la accion de convertir el texto recibido a mayusculas, si lo probamos funcionara de la siguiente manera:

>>> print(a_mayusculas('tinchicus'))
TINCHICUS
>>>
Anuncios

En resumen, hoy hemos visto sobre funciones recursivas y anonimas, hemos visto como se componen las funciones recursivas, como podemos utilizarlas, como trabajan y como nos ayudan en algunos temas, despues hablamos de las funciones anonimas, como se las denomina, como se las crea, para que podemos utilizarlas, como es su sintaxis y otra forma de usarla, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.00