Python

Funciones: divide los problemas y reutiliza soluciones

Guía práctica para aprender a crear funciones en Python, usar parámetros, devolver resultados con return y reutilizar código para resolver problemas.

Contenido de la guía
🐍 Python desde cero · Guía 9

Funciones en Python

Aprende a convertir instrucciones repetidas en pequeñas soluciones que puedes nombrar, reutilizar y combinar.

En la guía anterior aprendiste a organizar información mediante diccionarios y conjuntos. Ahora puedes relacionar datos mediante claves, conservar valores únicos y recorrer esas colecciones para trabajar con su contenido.

Sin embargo, organizar los datos resuelve solamente una parte del problema. Cuando un programa crece, también comienzan a repetirse los procedimientos que utilizamos con esos datos: calcular un total, comprobar una condición, construir un mensaje o mostrar un resultado.

Copiar las mismas instrucciones en varios lugares puede parecer sencillo al principio, pero hace que el programa sea más difícil de leer, corregir y ampliar. Si el procedimiento cambia, tendrías que localizar cada copia y modificarla por separado.

En esta guía descubrirás cómo las funciones en Python permiten reunir instrucciones relacionadas dentro de una solución con nombre. Después podrás utilizar esa solución cada vez que la necesites, proporcionarle información y combinarla con otras partes del programa.

Una función convierte una serie de instrucciones en una solución que puedes nombrar, utilizar y combinar.

  • 🧩 def
  • 📥 Parámetros
  • 📤 return
  • ♻️ Reutilización
  • 🧱 Problemas pequeños
Ilustración de instrucciones repetidas que se transforman en una función reutilizable para varios programas.
Figura 1 — Una función reúne instrucciones relacionadas para poder utilizarlas cada vez que sean necesarias.

De repetir instrucciones a nombrar una solución

Imagina que un programa debe calcular el precio total de varias compras. Para cada producto necesitas guardar su precio, indicar una cantidad, realizar una multiplicación y mostrar el resultado.

Una primera solución podría consistir en copiar esas instrucciones cada vez que aparezca una compra nueva. El programa funcionaría, pero comenzaría a contener varios grupos de líneas que realizan prácticamente la misma tarea.

El problema no consiste solamente en escribir más código. La repetición también hace que el programa sea más difícil de leer, corregir y ampliar.

📄

Más repeticiones

La misma secuencia de instrucciones aparece en diferentes partes del programa.

🔧

Más lugares que corregir

Un cambio pequeño debe aplicarse cuidadosamente en todas las copias.

🏷️

Una tarea sin nombre

El procedimiento existe, pero todavía no tiene una identidad que permita reutilizarlo.

Si después necesitas cambiar la forma de mostrar el total, añadir una condición o modificar el cálculo, tendrás que encontrar y actualizar cada copia por separado. Además de tomar más tiempo, este proceso aumenta la posibilidad de que alguna copia quede diferente a las demás.

Una función permite reunir ese procedimiento y asignarle un nombre descriptivo. En lugar de copiar nuevamente todas las instrucciones, el programa puede solicitar que se realice la tarea mediante ese nombre.

Antes de construir esta solución, conviene observar el problema completo. En el siguiente ejemplo encontrarás tres compras cuyo total se calcula repitiendo el mismo procedimiento.

Si una tarea aparece varias veces, probablemente necesita un nombre.

producto_1 = "cuaderno"
precio_1 = 8500
cantidad_1 = 3
total_1 = precio_1 * cantidad_1
print(f"{cantidad_1} unidades de {producto_1} cuestan ${total_1}")

producto_2 = "lápiz"
precio_2 = 2000
cantidad_2 = 5
total_2 = precio_2 * cantidad_2
print(f"{cantidad_2} unidades de {producto_2} cuestan ${total_2}")

producto_3 = "marcador"
precio_3 = 4500
cantidad_3 = 2
total_3 = precio_3 * cantidad_3
print(f"{cantidad_3} unidades de {producto_3} cuestan ${total_3}")

¿Qué es una función?

Una función es un grupo de instrucciones relacionadas que se encarga de realizar una tarea concreta. En lugar de dejar esas instrucciones dispersas o repetirlas, podemos reunirlas y darles un nombre.

Ese nombre permite identificar lo que hace la función y solicitar su ejecución cada vez que la necesitemos. Por ejemplo, podríamos crear una función para saludar, calcular un total, comprobar una condición o preparar un mensaje.

🏷️

Tiene un nombre

El nombre permite reconocer la tarea y utilizarla desde otras partes del programa.

▶️

Puede ejecutarse

Sus instrucciones se realizan cuando el programa llama la función.

🔄

Puede reutilizarse

La misma tarea puede ejecutarse varias veces sin copiar nuevamente sus instrucciones.

Algunas funciones realizan siempre la misma tarea. Otras pueden recibir información para trabajar con valores diferentes y también pueden producir un resultado que el resto del programa podrá utilizar.

En Python, una definición sencilla comienza con una estructura como esta: def nombre():. Por ahora, lo importante es reconocer que esta línea inicia la creación de una función y le asigna un nombre.

Crear la definición no ejecuta automáticamente sus instrucciones. Primero se describe la tarea y después, cuando sea necesaria, se realiza una llamada.

Una función describe una tarea; una llamada solicita que esa tarea se realice.

Anatomía de una función

Una función sencilla contiene varios elementos. Cada uno ayuda a Python a identificar dónde comienza la definición, cuál es su nombre y qué instrucciones pertenecen a la tarea.

def saludar () :
    print("Hola")
  • def

    Indica que comenzará la definición de una función.

  • saludar

    Es el nombre utilizado para identificar la tarea.

  • ()

    Los paréntesis forman parte de la definición. Más adelante podrán contener información.

  • :

    Los dos puntos señalan que a continuación comienza el cuerpo de la función.

  • Sangría

    Los cuatro espacios indican qué instrucciones pertenecen a la función.

  • print("Hola")

    Es una de las instrucciones que se realizará cuando la función sea llamada.

Llamar la función

Después de definirla, puedes escribir saludar() para solicitar que Python ejecute las instrucciones que contiene.

def saludar():
    print("¡Hola! Bienvenido a Python.")


saludar()
saludar()

Definir y llamar una función

Definir y llamar una función son acciones diferentes. Cuando Python encuentra una definición, identifica el nombre y guarda las instrucciones que pertenecen a esa función.

Guardar la función no significa ejecutar inmediatamente su contenido. El cuerpo comienza a ejecutarse solamente cuando el programa encuentra una llamada escrita con el nombre y los paréntesis.

📝

1. Definición

def saludar(): describe la tarea y guarda sus instrucciones.

▶️

2. Llamada

saludar() solicita que la tarea se ejecute.

💬

3. Resultado visible

Python entra en la función y realiza las instrucciones que contiene.

Cada llamada vuelve a ejecutar el cuerpo desde el principio. Por esta razón, una función puede utilizarse varias veces sin volver a escribir todas sus instrucciones.

Cuando la función termina, el programa continúa desde la línea situada inmediatamente después de la llamada.

⚠️ Los paréntesis son necesarios

Escribir solamente saludar hace referencia a la función, pero no solicita su ejecución. Para llamarla debes escribir saludar().

def mostrar_proceso():
    print("La función comenzó.")
    print("La función está ejecutando sus instrucciones.")


print("Antes de llamar la función.")
mostrar_proceso()
print("Después de llamar la función.")

Parámetros y argumentos

La función anterior muestra siempre el mismo saludo. Para que una función pueda trabajar con información diferente en cada llamada, podemos añadir un nombre dentro de sus paréntesis.

Ese nombre se denomina parámetro. El parámetro representa un dato que la función necesita y permite utilizarlo dentro de sus instrucciones.

El valor concreto enviado durante una llamada se denomina argumento. En cada ejecución, el parámetro recibe temporalmente el argumento enviado.

nombre

Es el parámetro escrito en la definición. Representa el dato que llegará cuando se llame la función.

"Laura"

Es un argumento enviado durante una llamada. En esa ejecución, será recibido por el parámetro nombre.

📨 Argumento "Laura"
📥 Parámetro nombre
💬 Uso dentro de la función Hola, Laura

Si después llamas la misma función con "Carlos", el parámetro recibirá ese nuevo argumento. Las instrucciones permanecen iguales, pero el dato utilizado durante la ejecución cambia.

Esta separación permite que una sola función trabaje con muchas personas, productos, cantidades u otros valores sin repetir su lógica.

El parámetro representa el dato que llegará; el argumento es el dato que realmente enviamos.

def saludar(nombre):
    print(f"Hola, {nombre}. Bienvenido a Python.")


saludar("Laura")
saludar("Carlos")
saludar("Sofía")

Funciones con varios parámetros

Una tarea puede necesitar más de un dato. Para calcular el total de una compra, por ejemplo, podemos utilizar el nombre del producto, su precio y la cantidad comprada.

Cuando una función necesita varios parámetros, sus nombres se escriben dentro de los paréntesis y se separan mediante comas: mostrar_total(producto, precio, cantidad).

def mostrar_total ( producto , precio , cantidad ):

Al realizar una llamada con argumentos posicionales, Python relaciona cada valor con el parámetro situado en la misma posición.

1
"cuaderno"producto

El primer argumento identifica el producto utilizado en esta llamada.

2
8500precio

El segundo argumento contiene el precio de una unidad.

3
3cantidad

El tercer argumento indica cuántas unidades se compraron.

↔️ El orden importa

Si intercambias los argumentos, cada parámetro recibirá un dato diferente. Por eso debes respetar el orden establecido en la definición y enviar la cantidad correcta de valores.

Los parámetros de una misma función pueden recibir tipos de datos diferentes. En este caso, producto recibe una cadena de texto, mientras que precio y cantidad reciben números.

Cambiar los argumentos permite utilizar la función con otras compras sin cambiar sus instrucciones. La lógica continúa siendo la misma: multiplicar el precio por la cantidad y mostrar el total correspondiente.

def mostrar_total(producto, precio, cantidad):
    total = precio * cantidad
    print(f"{cantidad} unidades de {producto} cuestan ${total}")


mostrar_total("cuaderno", 8500, 3)
mostrar_total("lápiz", 2000, 5)
Diagrama del flujo de dos argumentos que entran en una función y producen un resultado mediante return.
Figura 2 — Los argumentos proporcionan información a la función y return permite entregar el resultado obtenido.

Devolver resultados con return

Hasta ahora, nuestras funciones han realizado una tarea y han mostrado información mediante print(). Sin embargo, muchas veces necesitamos que el resultado calculado pueda continuar utilizándose en otras partes del programa.

La instrucción return entrega un valor al lugar donde se realizó la llamada. De esta forma, la función no se limita a mostrar lo que calculó: también puede proporcionar ese resultado para almacenarlo, compararlo o utilizarlo en otra operación.

📥 Argumentos Datos enviados durante la llamada
⚙️ Función Utiliza los datos y realiza el cálculo
📤 Resultado Valor entregado mediante return

Imagina una función que recibe el precio y la cantidad de un producto. Dentro de ella se realiza la multiplicación y después se escribe return total.

Cuando Python encuentra esa instrucción, devuelve el contenido de total al lugar de la llamada. Allí podemos guardar el resultado en una variable: total_compra = calcular_total(8500, 3).

📦

Almacenarlo

El resultado puede guardarse en una variable para utilizarlo posteriormente.

Usarlo en otra operación

El valor devuelto puede participar en nuevos cálculos sin repetir el procedimiento.

🔗

Enviarlo a otra función

Una segunda función puede recibir el resultado producido por la primera.

La función puede calcular sin mostrar

Una función que utiliza return puede limitarse a calcular y entregar el resultado. Después, el resto del programa decide cuándo mostrarlo y cómo utilizarlo.

return también finaliza la función

Cuando se ejecuta return, la función entrega el valor y termina en ese punto. Las instrucciones colocadas después no se ejecutarán dentro de esa misma ruta.

return no muestra el resultado: lo entrega para que el programa decida qué hacer con él.

def calcular_total(precio, cantidad):
    total = precio * cantidad
    return total


total_cuadernos = calcular_total(8500, 3)
total_lapices = calcular_total(2000, 5)

print(f"Total de cuadernos: ${total_cuadernos}")
print(f"Total de lápices: ${total_lapices}")

print() y return pueden aparecer dentro de una función, pero cumplen responsabilidades diferentes. Comprender esta diferencia permite decidir si un dato solo debe mostrarse o si debe continuar utilizándose.

🖥️ print()

  • Muestra información en la pantalla.
  • Permite que una persona observe un mensaje o resultado.
  • Es útil para presentar información y revisar el programa.
  • No entrega automáticamente el dato para continuar calculando.

Utilízalo cuando el objetivo principal sea mostrar información.

📤 return

  • Entrega un resultado al lugar de la llamada.
  • Permite guardar el resultado en una variable.
  • Permite utilizarlo en otra operación.
  • Facilita que varias funciones colaboren entre sí.

Utilízalo cuando el programa necesite continuar trabajando con el dato.

Una función puede utilizar ambos. Por ejemplo, puede mostrar un mensaje informativo con print() y devolver un valor mediante return. Aun así, ambas instrucciones no son intercambiables.

print() comunica un dato; return permite que el programa lo reutilice.

def mostrar_doble(numero):
    print(numero * 2)


def calcular_doble(numero):
    return numero * 2


resultado_mostrado = mostrar_doble(5)
resultado_devuelto = calcular_doble(5)

print(f"Valor guardado desde mostrar_doble: {resultado_mostrado}")
print(f"Valor guardado desde calcular_doble: {resultado_devuelto}")
print(f"Resultado reutilizado: {resultado_devuelto + 4}")

¿Qué ocurre cuando una función no utiliza return?

Toda llamada a una función produce un resultado. Cuando la función no contiene un return explícito, Python devuelve automáticamente el valor None.

None representa la ausencia de un valor útil. No significa cero, una cadena vacía ni un error: indica que la función terminó sin entregar otro resultado.

Por esta razón, una función puede mostrar correctamente un número y, al mismo tiempo, devolver None. Mostrar el dato no equivale a entregarlo.

1
Olvidar los paréntesis

Escribir calcular_total hace referencia a la función. Para ejecutarla debes escribir sus paréntesis y argumentos.

2
Enviar una cantidad incorrecta de argumentos

Los parámetros obligatorios deben recibir la cantidad de argumentos esperada por la definición.

3
Calcular con una función que solo imprime

Si la función no devuelve el número mediante return, la llamada producirá None.

Pregunta clave

Antes de terminar una función, pregúntate si el resultado solo debe mostrarse o si el programa necesitará utilizarlo después.

Estás viendo solo el 60% del contenido. Hazte Premium para acceder a la guía completa.

Comunidad

Comentarios y valoraciones

No hay comentarios aún. ¡Sé el primero en opinar!