Funciones

Lo más importante para programar, y no solo en Python, es saber organizar el código en piezas más pequeñas que hagan tareas independientes y combinarlas entre sí. Las funciones son el primer nivel de organización del código: reciben unas entradas, las procesan y devuelven unas salidas.

Ejercicio 1: Función que imprime

Como primer paso, vamos a crear una función que no recibe ninguna entrada ni produce ninguna salida, pero que imprime una frase por pantalla. Para eso emplearemos la palabra clave def, seguida del nombre de la función, y abriremos un bloque nuevo.

¡No olvides los dos puntos! Si el sangrado del código no avanza automáticamente, es que te los has dejado.

In [1]:
def funcion1():
    print("¡Soy la función 1!")

Y ahora invocamos la función con la sintaxis que ya conocemos:


In [2]:
funcion1()


¡Soy la función 1!
¡Observa que no aparece `Out [2]`! Eso es porque, en realidad, la función no tiene salidas: solo una llamada a `print`. Mira lo que ocurre si intentamos asignar la salida de la función a una variable:

In [3]:
salida = funcion1()


¡Soy la función 1!

In [4]:
salida

In [5]:
salida is None


Out[5]:
True

En el siguiente ejercicio vamos a ver cómo evitar esto.

Ejercicio 2: Función que devuelve

Vamos a crear ahora una función sin entradas pero con una salida. Para ello usamos la palabra clave return.


In [6]:
def funcion2():
    return "Salida de la función 2"

In [7]:
funcion2()


Out[7]:
'Salida de la función 2'

Y ahora sí podemos asignar esa salida a una variable:


In [8]:
salida = funcion2()

In [9]:
print(salida)


Salida de la función 2

In [10]:
salida[4::2]  # Lo primero que se me ha venido a la cabeza


Out[10]:
'd el ucó '

Aclarado el concepto (que a veces puede quedar difuso cuando se trabaja en modo interactivo) normalmente querremos devolver valores. De esta forma podemos enlazar funciones como si fueran bloques, uno detrás de otro, y estructurar nuestro programa mucho mejor.

Ejercicio 3: Función de una entrada

Vamos a crear ahora una función que compruebe si un número es mayor o menor que cinco. La salida ahora no nos importa mucho: lo importante es que al declarar los argumentos de entrada en la definición de la función, podremos usarlos dentro de ella con el nombre que decidamos.


In [11]:
def comparar_cinco(num):
    if num < 5:
        return "El número es menor que cinco"
    elif num == 5:
        return "El número es igual a cinco"
    else:
        return "El número es mayor que cinco"

In [12]:
print(comparar_cinco(2))


El número es menor que cinco

In [13]:
mi_numero = 7  # Aquí la variable se llama `mi_numero`
print(comparar_cinco(mi_numero))  # ¡Dentro de la función eso me da igual!


El número es mayor que cinco
Apuntes:
  • Podríamos haber puesto un `elif num > 5` en la última parte en vez de un `else`. En este caso es obvio, pero en otros puede no ser tan evidente.
  • Algunos prefieren sacar los `return` fuera del condicional, o incluso que solo haya uno. http://stackoverflow.com/q/9191388/554319 ¡Cuestión de gustos!

En esta clase hemos visto cómo crear funciones que encapsulen tareas de nuestro programa

Referencias



¡Síguenos en Twitter!



Este notebook ha sido realizado por: Juan Luis Cano, y Álex Sáez



<span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Curso AeroPython</span> por <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">Juan Luis Cano Rodriguez y Alejandro Sáez Mollejo</span> se distribuye bajo una Licencia Creative Commons Atribución 4.0 Internacional.