Introducción a las funciones en Python 3

Python

Las funciones en Python 3 son un bloque de instrucciones que podemos reutilizar cada vez que lo necesitemos y que se ejecuta solo cuando la llamamos. Recibe desde cero a varios parámetros de entrada y sigue una secuencia de sentencias que opcionalmente comunican con el exterior por medio de la sentencia return.

Python dispone de una serie de funciones integradas al lenguaje como por ejemplo input(), len(), count() entre otras, aunque también permite definir nuestras propias funciones para ser utilizadas en nuestros programas.

Ventajas de utilizar funciones

Una de las principales ventajas de las funciones aparte de reducir el código notablemente es su modularización, ya que permite segmentar un programa complejo en una serie de módulos reutilizables facilitando la programación, la lectura y el depurado.

Sus características son las siguientes:

  • Palabra clave reservada def
  • Nombre de la función
  • Parámetros de entrada entre paréntesis (opcional)
  • Cuerpo o bloque de código
  • Sentencia return (opcional)

Sintaxis de las funciones

Para definir una función basta con utilizar la palabra reservada def de la siguiente forma:

1 – Función sin parámetros

# Función sin parámetros ni retorno
def welcome():
    print("Hola")

# Llamada a la función
welcome()

Si no llamamos a la función no se ejecutará.

# Salida
Hola

2 – Función con un parámetro sin return.

# Función con un parametro sin retorno
def user(name):
    print("Hola", name)

# Llamada a la función
user("Jimena")
# Salida
Hola Jimena

3 – Función con varios parámetros y retorno

def multiplication(a, b):
    total = a * b
    return total

# Llamada a la función
multiplication(10, 2)
# Salida
20

Las funciones como hemos podido ver siempre devuelven un valor. La sentencia return devuelve un valor concreto y en el caso que no desees devolver ninguno, la función devuelve el valor predeterminado None.

Un resultado idéntico al anterior ejemplo pero utilizando la sentencia return directamente sería el siguiente:

def multiplication(a, b):
    return a * b

# Llamada a la función
multiplication(10, 2)

Nota

Si una función incluye parámetros, al llamarla debe de incluir el mismo número de parámetros asignados, de lo contrario devolverá un error: missing (x) required positional argument: (x).

Asignar funciones a variables

Una función es un objeto por lo que también se pueden asignar a variables para posteriormente utilizarlas como una función.

Veamos el siguiente ejemplo:

# Definimos la función
def multiplication(a, b):
    return a * b

# Le asignamos una variable
result = multiplication(2, 10)
print("El resultado de 2 * 10 =", result)
# Salida
El resultado de 2 * 10 = 20

Otro punto importante es que las variables definidas dentro de una función, solo existen en el ámbito de dicha función y no se comunican con el exterior.

Variables locales y globales

Una variable local es aquella que está definida dentro de una función y cuyo ámbito es local, por lo tanto dejan de existir al finalizar su ejecución. En Python las variables también pueden tener un ámbito global y estas pueden ser definidas dentro de la función con la palabra reservada global.

Este tipo de práctica no suele ser muy recomendable o si se hace, debe de ser moderadamente ya que si tenemos otra variable con el mismo identificador, esta será sobrescrita por la variable global como podemos ver en el siguiente ejemplo.

def sum(a, b):
    global c # Variable global
    c = a + b
    return c

# Variable principal
c = 10

print('Resultado: ', sum(12, 5))
print('Variable global:', c)
# Salida
Resultado:  17
Variable global: 17

Comentarios vs Docstrings

Los comentarios en Python sirven para documentar y ayudar a los programadores a comprender e interpretar el código y la funcionalidad del programa. Se utiliza un hashtag # como prefijo y se debe de repetir en cada salto de línea.

# Estas líneas Python las ignora
print("Aquí ya no")

Los docstrings son descripciones que ayudan a comprender el funcionamiento de una función. Un docstring va entre triple comillas ''', puede ser multilínea y deben de situarse al principio de la función.

def sum(a, b):
    '''
    Esta función devuelve la suma entre dos
    números facilitados por el usuario.
    Args;
        a (int): sumando
        b (int): sumando
    Return:
        result: suma
    '''
    result = a + b
    return result
sum(5, 12)

Cuando estás escribiendo un programa de muchas líneas de código con sus respectivas clases y demás , es lógico que no recuerdes dónde está cada docstring, por eso, gracias al método .__doc__ podemos acceder a la descripción indicada en el docstring de la función deseada.

Utilizando el ejemplo anterior imprimiremos el doc de la función definida por nosotros sum():

print(sum.__doc__)
# Salida
Esta función devuelve la suma entre dos
números facilitados por el usuario.
    Args;
        a (int): sumando
        b (int): sumando
    Return:
        result: suma

Nota

Los docstrings se pueden utilizar también fuera de las funciones para documentar más de 3 líneas, como por ejemplo en una clase.

Ejercicio real con funciones

El siguiente código fue parte de un ejercicio en mi aprendizaje con funciones en Python como parte de un examen.

Se trata de una función que recibe cómo entrada las horas trabajadas, las horas extras si las hay y la tarifa por hora, nos devuelve el total a abonar.

Características y lógica

  • Parámetros hrs y rate
  • Horas introducidas por el usuario (hrs)
  • Tarifa introducida por el usuario (rate)
  • Pago normal (normal_pay) * (rate) todo lo que no supere de 40 horas
  • Se restan 40 horas de (hrs) para quedarnos con las horas extras en (extra)
  • Pago por hora extra aumentado en 1.5 sobre el precio de la tarifa en (extra)
  • Suma entre horas normales y las extras en (payroll)
# Función que calcula hora/tarifa
def Computepay(hrs, rate):
    if hrs > 40:
        normal_pay = 40 * rate
        extra = (hrs - 40) * (rate * 1.5)
        payroll = normal_pay + extra
    else:
        payroll = hrs * rate
    return payroll

# Entrada de datos por el usuario
hrs = float(input("Horas trabajadas: "))
rate = float(input("Precio por hora: "))

# Llamada a la función
pay = Computepay(hrs, rate)

# Imprimir en pantalla
print("Nómina a abonar:", pay)

Puedes utilizar este código y realizar pruebas modificando o aumentando su complejidad, utilizando estructuras de control como los bucles o cualquier cosa que se te ocurra.

Conclusión

En Python como en otros lenguajes de programación existen diferentes tipos de funciones pero en este artículo, hemos abordado las definidas por el usuario sin complejidades y de un modo introductorio para que puedas definir tus primeras funciones con lo básico que deberías de saber.

Para saber más sobre las funciones integradas por Python puedes hacerlo desde su documentación.

Sigue el tutorial

Expresiones Lambda en Python 3

NEWSLETTER

Suscribirte a Exploradata.com es recibir en tu bandeja de entrada los últimos artículos y novedades del blog, para que no te pierdas nada.