Funciones

Un elemento extremadamente útil es la posibilidad de definir y usar funciones. En realidad ya hemos usado funciones (como la función range), pero eran funciones definidas por Python y que nos ofrecen una funcionalidad concreta que no siempre va a adaptarse a nuestras necesidades. Python nos permite definir nuestra propias funciones, lo que tiene dos grandes ventajas:

  • Nos evita tener que escribir el mismo código una y otra vez en nuestro programa. En lugar de esto movemos ese código a la función e invocamos ésta con los argumentos adecuados cada vez que queramos ejecutar esas instrucciones.
  • También nos permiten sacar más provecho de nuestro trabajo al poder reutilizar estas funciones en diferentes programas.

La estructura de una función es la siguiente:

def nombre-de-la-función(parámetro1, parámetro2, ...):

    código-de-la-función

    return valor-a-devolver

En su forma más simple, la función es llamada sin ningún argumento y no devuelve ningún valor, simplemente ejecuta el código que contiene:

def imprimeHola():
    print("Hola")

 

imprimeHola()

Hola

En el ejemplo anterior definimos la función -a la que hemos dado el nombre de "imprimeHola"-, entre paréntesis no añadimos el nombre de ningún parámetro pues esta función en particular no acepta ninguno y, con el sangrado que ya conocemos de cuatro espacios en blanco o un tabulador hemos añadido el código que se ejecutará cuando se ejecute la función. Una vez definida ésta, podemos invocarla con la instrucción "imprimeHola()", cosa que hacemos en la última línea de código de la celda. Obsérvese que, aun sin añadir ningún argumento, es necesario invocar la función con los paréntesis.

Lo más frecuente, sin embargo, es que la función requiera de cierta información para poder realizar su trabajo -información que se le va a pasar vía argumentos- y que queramos que devuelva el resultado de dicho trabajo -lo que haremos usando la sentencia return-. Veamos un ejemplo concreto: Supongamos que tenemos en un diccionario las ventas realizadas por cada comercial de la empresa:

ventas = {"Óscar": 15000, "Sonia": 12000, "Ángel": 9000}
ventas

{'Óscar': 15000, 'Sonia': 12000, 'Ángel': 9000}

Y supongamos también que queremos calcular la comisión que le corresponde a cada comercial y que este cálculo es complejo (aunque en este ejemplo supondremos que simplemente es el 5% de las ventas). La estructura de nuestro programa escrita en pseudo-código sería algo como

para cada comercial en ventas:

   comisión = cálculo-de-la-comisión(venta-del-comercial)

En el anterior esquema, "cálculo-de-la-comisión" debería ser una función que aceptase como argumento de entrada las ventas de un comercial y devolviese la comisión correspondiente. Escribamos el código llamando a esa función "calculo_comision":

def calculo_comision(ventas_comercial):
    comision_comercial = ventas_comercial * 0.05
    return comision_comercial

 

for comercial, venta in ventas.items():
    comision = calculo_comision(venta)
    print(comercial, ":", comision, "€")

Óscar : 750.0 €
Sonia : 600.0 €
Ángel : 450.0 €

La función que hemos definido, calculo_comision, espera un argumento al que, dentro de la función, se va a llamar ventas_comercial. Una vez realizados los cálculos pertinentes, la función devuelve un valor con la sentencia return. En este caso se trata de la comisión a pagar al comercial.

Para extraer la información del diccionario de ventas hemos utilizado un bucle for que recorre la lista de tuplas, extrayéndose los dos valores de cada tupla (la clave y el valor) y almacenándose éstos en las variables comercial y venta.