Funciones#

Hemos utilizado funciones en lecciones anteriores. Las funciones tienen un nombre y parámetros. Algunas de ellas devuelven un resultado, otras no. Normalmente las llamamos usando resultado = nombre(parámetros).

Ver también

Echemos un vistazo a algunas funciones, por ejemplo print(texto) y pow(x, y). La función print toma un parámetro (o múltiples parámetros) y no devuelve nada:

result = print('Hello world')
Hello world
result

La función pow tiene dos parámetros y devuelve un resultado:

result = pow(2, 3)
result
8

Funciones personalizadas#

Puedes DEFinir tus propias funciones usando la declaración def. Después de la declaración def, debes especificar el nombre de tu función y entre paréntesis sus parámetros. A continuación, sigue dos puntos : y todas las líneas de código siguientes que estén indentadas forman parte de esta función. Una declaración return final envía el resultado de vuelta desde donde se llamó a la función.

def sum_numbers(a, b):
    
    result = a + b
    
    return result

Luego puedes llamar a tu función tantas veces como quieras

sum_numbers(3, 4)
7
sum_numbers(5, 6)
11

A veces, quieres guardar el resultado de tu función en una variable.

c = sum_numbers(4, 5)
print(c)
9

Simplificar código usando funciones#

Supongamos que tienes un algoritmo complicado que puede decirte si un número es impar o par. Pongamos este algoritmo en una función y llamémoslo más tarde. Para nuestro algoritmo, usaremos el operador módulo %.

def print_odd_or_even(number):
    if number % 2 == 0:
        print(number, "is even")
    else:
        print(number, "is odd")
print_odd_or_even(3)
3 is odd
print_odd_or_even(4)
4 is even
print_odd_or_even(10)
10 is even

Así, en lugar de escribir el mismo bloque if-else una y otra vez, podemos simplemente llamar a nuestra función personalizada print_odd_or_even.

Documentar funciones#

Puedes documentar lo que hace una función en su llamada cadena de documentación (doc string). La cadena de documentación va justo después del encabezado de la función y se ve así:

def square(number):
    '''
    Eleva al cuadrado un número multiplicándolo por sí mismo y devuelve su resultado.
    '''

    return number * number

Luego puedes leer la documentación de la función así:

print(square.__doc__)
    Squares a number by multiplying it with itself  and returns its result.
    

También puedes probar esto si quieres que se muestre la cadena de documentación lado a lado en tu notebook:

square?
Signature: square(number)
Docstring: Squares a number by multiplying it with itself  and returns its result.
File:      /var/folders/p1/6svzckgd1y5906pfgm71fvmr0000gn/T/ipykernel_11914/1507435947.py
Type:      function

Por cierto, puedes hacer esto con cualquier función:

import math
print(math.sqrt.__doc__)
Return the square root of x.
print(math.exp.__doc__)
Return e raised to the power of x.

Ejercicio#

Escribe una función que tome dos parámetros: number_of_points_in_exam y number_of_total_points_in_exam y devuelva una calificación del 1 al 5. Los estudiantes con > 95% de los puntos obtienen calificación 1, por encima del 80% obtienen calificación 2, por encima del 60% calificación 3 y por encima del 50% calificación 4. Los estudiantes con menos del 50% obtienen calificación 5 y tienen que repetir el examen. Luego, llama a la función para tres estudiantes que obtuvieron 15, 25 y 29 puntos en un examen con 30 puntos totales.