Bienvenidos una vez más a Python desde Cero, curso en el cual aprendemos a programar sin conocimiento alguno. En el capítulo anterior, te enseñe todo lo referente al uso de variables, operadores y estructuras de control.

Hoy, aprenderemos todo lo que tiene que ver con las funciones dentro de Python, desde los tipos hasta los estándares necesarios para desarrollar una buena función.

¿Qué es una Función?

Una función es un bloque de código el cual puede ser ejecutado cuando y cuantas veces deseemos. Son de gran ayuda cuando necesitamos que un programa ejecute cierta operación muchas veces.

Existen dos tipos de funciones, las creadas por ti, la cuales incluyen el código que tu deseas ejecutar, y las que vienen incluidas con Python, las cuales sirven para realizar procedimientos básicos, como por ejemplo convertir un integer en un string o saber cual es el tamaño de dicho string.

Funciones – Creadas por ti

La mejor manera de enseñar a usar las funciones, es con un ejemplo, por lo que imaginemos que queremos hacer un programa para un carrito de compras online el cual toma todos los costos de los artículos que desees comprar y los suma para luego retornar el costo total de la compra.

Vamos a escribir una función que nos permita agarrar dos precios de artículos de compra, sumarlos y después imprimir ese valor. Veamos como hacerlo:


#nuestros dos precios de los artículos

articulo1 = 10  #articulo 1 posee un precio de 10

articulo2 = 25 #articulo 2 posee un precio de 25



def totalizarCompra():

costoTotal = articulo1 + articulo2

print costoTotal



totalizarCompra()

Para definir una función en Python lo único que debemos usar es la palabra clave def y luego colocar el nombre que le queremos dar a la función, en este caso totalizarCompra. Luego, tipeamos dos paréntesis (más adelante veremos que se puede hacer con esos paréntesis pero por los momentos vamos a mantenerlo simple), y finalmente agregamos dos puntos.

Después de esto, todo el código que deseemos agregar a la función debe estar identado (al igual que con los if, while, etc . Para más información te invito a repasar el capítulo anterior). Para poder ejecutar dicha función lo único que necesitamos hacer es tipear el nombre de la función seguida de dos paréntesis (e.j. totalizarCompra()).

Si ejecutamos el script podemos observar que nos retorna 35, lo que es correcto.


$ python2.7 carritoCompra.py

$ 35

Argumentos

Hasta los momentos nuestra función parece un poco rígida, ya que no puede manejar variables o valores externos dentro del bloque de código. Veamos como podemos hacer para que esta función tome algunos argumentos o valores externos.

Imaginemos por un momento que la función totalizarCosto() la queremos usar en otra parte de nuestro programa, pero en vez de siempre sumar los mismos valores articulo1 + articulo2, sumemos artículos diferentes con diferentes precios. Para llevar a cabo este requerimiento, vamos a usar los ‘argumentos’, los cuales van a estar definidos dentro de los dos paréntesis que posee la función.

Un argumento es la vía para pasar información a una función cuando no sabemos el valor o valores que esa variable posee.

¿Confundido?, veamos el ejemplo anterior y salgamos de las dudas. Ya sabemos que necesitamos agregarle argumentos a la función. Veamos como:


articulo1 = 10 #articulo 1 posee un precio de 10

articulo2 = 40 #articulo 2 posee un precio de 40

articulo3 = 5 #articulo 3 posee un precio de 5

articulo4 = 25 #articulo 4 posee un precio de 25



def totalizarCompra(item1, item2):

costoTotal = item1 + item2

print costoTotal



totalizarCompra(articulo1, articulo2)

Los argumentos van definidos dentro de los paréntesis de la función. Cada argumento que deseamos generar debe tener tu propio nombre y deben estar separado por comas. Este actúa como una referencia temporal hacia la información que le pasamos a la función mientras que esta ejecuta el bloque del código.

Observemos que lo primero que hicimos fue agregar dos artículos más articulo3 y articulo4 para poder probar el script con diferentes artículos. Segundo, agregamos dos argumentos item1 y item2 los cuales mantendrán el valor de los artículos para así después sumarlos.

Por último, veamos que pasa cuando invocamos la función con los dos argumentos totalizarCompra(articulo1, articulo2). Lo primero que ocurre es que las dos variables que le pasamos articulo1 y articulo2 se convierten en los argumentos item1 y item2 respectivamente. Esto siempre ocurre en el orden que que uno define los argumentos, es decir, la primera variable que pasamos es asignada al primer argumento, las segunda al segundo argumento y así sucesivamente.

Segundo, las variables que le pasamos se convierten variables locales dentro del bloque de código de la función, esto significa que podemos hacer uso de esas variables fácilmente (item1 y item2).

Suficiente explicaciones, ahora ejecutemos el script y veamos que nos devuelve:


$ python2.7 carritoCompra.py

$ 50

Como podemos ver, nos devolvió la suma del articulo1 y articulo2. Ahora veamos que pasa si en vez de pasarle articulo1 y articulo2 como argumentos, le pasamos articulo3 y articulo4. Cambiemos solo la última línea del script por totalizarCompra(articulo3, articulo4)


articulo1 = 10 #articulo 1 posee un precio de 10

articulo2 = 40 #articulo 2 posee un precio de 40

articulo3 = 5 #articulo 3 posee un precio de 5

articulo4 = 25 #articulo 4 posee un precio de 25



def totalizarCompra(item1, item2):
 costoTotal = item1 + item2

 print costoTotal



totalizarCompra(articulo3, articulo4)

Si ejecutamos el script podemos observar que exitosamente imprime 30, la suma del articulos3 y del articulo4, ya que esos fueron los argumentos que les pasamos.


$ python2.7 carritoCompra.py

$ 30

¿Cómo retornar valores dentro de una función?

Por último, veamos una de las características más importantes dentro del capítulo de funciones, la forma de como retornar valores dentro de una función.

Hasta ahora hemos visto como hacer funciones que no retornan ninguna información, pero ¿qué pasa sí necesitamos guardar la respuesta de totalizarCompra(articulo3, articulo4) en vez de imprimirla?

La respuesta es sencilla, lo único que debemos hacer es asignar en la función que variable va a hacer el valor de retorno. La manera de asignar o decirle a la función que retorne una variable es con la palabra clave return.Veamos el ejemplo anterior, vamos a remplazar la palabra print de la función totalizarCompra() por la palabra return. Así la función sabrá que deberá retornar el valor de costoTotal y no imprimirlo.


articulo1 = 10 #articulo 1 posee un precio de 10

articulo2 = 40 #articulo 2 posee un precio de 40

articulo3 = 5 #articulo 3 posee un precio de 5

articulo4 = 25 #articulo 4 posee un precio de 25



def totalizarCompra(item1, item2):

 costoTotal = item1 + item2

 return costoTotal



total1 = totalizarCompra(articulo1, articulo2)

total2 = totalizarCompra(articulo3, articulo4)



print total1

print total2

Obviamente, la función no va imprimir la respuesta sino que va a devolver a las variables toatl1 y total2, los valores correspondientes a la suma de sus artículos, es decir, total1 va a recibir la suma de articulo1 y articulo2, y total2 va a recibir la suma de articulo3 y `articulo4’.

Si ejecutamos el script observamos:


$ python2.7 carritoCompra.py

$ 50

$ 30

Funciones – Incorporadas

Existen operaciones que son muy usadas dentro de la programación, es por eso que Python las incluye para que así las podamos usar en cualquiera de nuestros programas que estemos desarrollando.

La manera para invocar dichas funciones es exactamente la misma como invocamos las funciones que desarrollamos nosotros pero con la única deferencia que no debemos definirlas con anterioridad.

En este capítulo, vamos a pasearnos por la funciones más importantes y más usadas dentro del mundo de la programación, pero existen miles y miles de funciones que Python pone a tu disposición para que hagas uso de ellas, si quieres echarle un ojo te recomiendo la documentación de Python.

str()

Primero, veamos una de las funciones más usadas en Python: el convertidor a string. Muchas de las veces que uno desarrolla aplicaciones se encuentra con la necesidad de convertir una variable que contiene un número en una cadena de caracteres. Como por ejemplo:


numero = 10

print 'El número es ' + numero

Si ejecutamos ese script nos encontraremos con un error ya que le estamos pidiendo a Python que añada un número a una cadena de caracteres. Es en este caso donde srt() sale al rescate!, ya que esta toma el valor del número y lo retorna como un string(cadena de caracteres). De esta manera Python entenderá que + no significará sumar los dos elementos sino concatenar o juntar dos cadenas de caracteres. Veamos como:


numero = 10

print 'El número es ' + str(numero)

Ahora si ejecutamos este trozo de código, observamos que nos imprime la cadena de caracteres sin ningún problema:


$ El número es 10

str() no solo acepta valores tipo integer, también puede aceptar diferente tipos de dato como por ejemplo Booleans.


bool = True

print 'El valor de la variable es ' + str(bool)

len()

Otra tarea muy común es saber cual es el tamaño de una cadena de caracteres, es ahí donde Python nos cubre las espaldas y nos proporciona **len(), función que toma una cadena de caracteres y nos retorna el tamaño de la misma en forma de número. Veamos como usarla:


cadena = 'Hola Codehero!'

print len(string)

Si ejecutamos el código vemos que imprime 14, que es el número de caracteres que posee ese Hola Codehero!.


$ 14

range()

Finalmente, veamos una función que no es tan común pero que viene a la mano una vez que uno empieza a desarrollar programas más complejos en Python. Estamos hablando de range, función que nos permite crear una lista de números dado el número al cual queremos llegar, es decir, si queremos crear una lista de número del 0 al 10, es mucho más fácil hacerlo con esta función que tipear todos los números uno a uno.

Veamos como usarla:


numeros = range(11)

print(numeros)

Lo único que necesitamos para usar la función es pasarle como argumento el número que deseamos alcanzar range(numero).

Es importante saber que la función genera el ciclo de número hasta el número menor al que le pasamos como argumento. Por lo que si queremos crear 10 números, debemos pasarle 11 como argumento.

Ahora veamos como hacer si quiero solo los número del 5 al 10:


numeros = range(5, 11)

print(numeros)

Podemos observar que range también puede tomar dos argumentos, siendo el primero el número inicial y el segundo el número final de la serie.

Ya para finalizar veamos como hacer si solo quiero los números impares del 1 al 10:


numeros = range(5, 11, 2)

print(numeros)

Observemos que range también puede tomar 3 argumentos, siendo el primero el número inicial y el segundo el número final de la serie y el tercero la cantidad de números que debe sumar entre cada iteración.

Conclusión

En esta lección, aprendimos como crear en Python nuestras propias funciones y como usar las funciones que ya viene incorporadas en el lenguaje!. Si tienes alguna pregunta, yo estaré feliz de responderte en los comentarios, además espero que te unas y le eches un vistazo a todo el resto de este curso. Te espero la próxima semana!