Saltar al contenido principal
ByteNova
Programación

¿Qué son las funciones en programación?

Publicado por ByteNova · · Actualizado el

En este artículo aprenderás:

Cómo crear funciones reutilizables, trabajar con parámetros y argumentos, devolver resultados con return y organizar programas en tareas más pequeñas.

A medida que un programa crece, repetir las mismas instrucciones en distintas partes hace que el código sea más difícil de mantener. Las funciones permiten agrupar una tarea bajo un nombre y ejecutarla cada vez que sea necesaria.

¿Qué es una función?

Una función es un bloque de código diseñado para realizar una tarea específica.

Una vez definida, podemos ejecutar esa función tantas veces como necesitemos sin volver a escribir todas sus instrucciones.

Imagina una tienda que necesita calcular el total de muchos productos. En lugar de repetir la fórmula cada vez, podemos crear una función llamada calcular_total().

Las funciones permiten dividir un problema grande en tareas más pequeñas y fáciles de comprender.

¿Por qué utilizar funciones?

Las funciones aportan varias ventajas.

  • Reutilización: una misma función puede ejecutarse muchas veces.
  • Organización: permiten dividir el programa en tareas concretas.
  • Mantenimiento: si una regla cambia, podemos modificarla en un solo lugar.
  • Pruebas: una función pequeña suele ser más fácil de comprobar.
  • Lectura: un buen nombre puede explicar qué hace una parte del programa.

Supongamos que necesitamos calcular el precio final en diez lugares diferentes.

Si copiamos la fórmula diez veces y después cambia la regla, tendremos que modificar diez fragmentos.

Con una función podemos cambiar la lógica una sola vez.

Cómo crear una función en Python

En Python utilizamos la palabra def para definir una función.

def saludar():
    print("Hola desde ByteNova")

Aquí:

  • def indica que estamos definiendo una función.
  • saludar es el nombre de la función.
  • Los paréntesis forman parte de la definición.
  • Los dos puntos : indican el inicio del bloque.
  • El código indentado pertenece a la función.

Cómo llamar una función

Definir una función no significa que se ejecute automáticamente. Para utilizarla debemos llamarla.

def saludar():
    print("Hola desde ByteNova")


saludar()

El resultado será:

Hola desde ByteNova

Podemos llamarla varias veces:

saludar()
saludar()
saludar()

La misma función se ejecutará tres veces.

Parámetros y argumentos

Muchas funciones necesitan recibir información para poder realizar su trabajo.

Los parámetros son los nombres que definimos para recibir esos datos.

def saludar(nombre):
    print(f"Hola, {nombre}")

En este caso nombre es un parámetro.

Cuando llamamos la función enviamos un valor:

saludar("Ana")

"Ana" es el argumento.

Diferencia rápida

El parámetro aparece en la definición de la función. El argumento es el valor concreto enviado cuando la llamamos.

Utilizar varios parámetros

def mostrar_producto(nombre, precio):
    print(f"{nombre}: ₡{precio}")


mostrar_producto("Teclado", 15000)

Aquí la función recibe dos datos diferentes.

Valores de retorno

Una función puede devolver un valor utilizando return.

def sumar(a, b):
    return a + b


resultado = sumar(5, 3)

print(resultado)

La función calcula 5 + 3 y devuelve el resultado.

Ese valor puede guardarse:

resultado = sumar(5, 3)

También podemos utilizarlo directamente en otra operación:

total = sumar(5, 3) * 2

print(total)

Uno de los errores más comunes al aprender funciones es pensar que print() y return hacen lo mismo.

No es así.

print() muestra información

def sumar(a, b):
    print(a + b)


sumar(5, 3)

El número se muestra en pantalla, pero no obtenemos ese resultado para utilizarlo fácilmente después.

return devuelve información

def sumar(a, b):
    return a + b


resultado = sumar(5, 3)

print(resultado)

Ahora el valor devuelto puede guardarse, compararse, enviarse a otra función o utilizarse en un cálculo.

Regla práctica

Utiliza print() cuando quieras mostrar información. Utiliza return cuando quieras entregar un resultado a otra parte del programa.

Alcance de las variables

Las variables creadas dentro de una función normalmente tienen un alcance local.

def calcular():
    resultado = 10 + 5
    print(resultado)


calcular()

resultado pertenece al contexto de la función.

Intentar utilizarla directamente fuera puede producir un error:

print(resultado)

Mantener variables locales ayuda a reducir conflictos entre diferentes partes del programa.

Variables externas

Una función también puede leer determinados valores definidos fuera, aunque conviene evitar depender excesivamente de datos globales.

impuesto = 0.13

def calcular_impuesto(precio):
    return precio * impuesto

En programas pequeños esto puede funcionar, pero pasar datos mediante parámetros suele hacer que las funciones sean más fáciles de reutilizar y probar.

Parámetros con valores predeterminados

Python permite asignar un valor predeterminado a un parámetro.

def saludar(nombre, mensaje="Hola"):
    print(f"{mensaje}, {nombre}")


saludar("Ana")
saludar("Carlos", "Buenos días")

En la primera llamada no enviamos un mensaje, por lo que Python utiliza "Hola".

En la segunda llamada enviamos un valor diferente.

Esto resulta útil cuando existe un comportamiento común pero queremos permitir que sea personalizado.

Ejemplo práctico: calcular el total de una compra

Vamos a crear una función que reciba el precio de un producto y la cantidad comprada.

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


total_teclados = calcular_total(15000, 2)
total_mouse = calcular_total(8000, 3)

print(f"Teclados: ₡{total_teclados}")
print(f"Mouse: ₡{total_mouse}")

La misma función se utiliza para productos diferentes.

Para los teclados:

15000 * 2 = 30000

Para los mouse:

8000 * 3 = 24000

No necesitamos duplicar la lógica de multiplicación.

Mejorar la función

Podemos agregar validaciones:

def calcular_total(precio, cantidad):
    if precio < 0 or cantidad < 0:
        return None

    return precio * cantidad

Ahora la función evita calcular un total cuando recibe valores negativos.

Errores comunes al trabajar con funciones

Definir una función y olvidar llamarla

Una función no se ejecuta solo porque exista.

def mostrar_mensaje():
    print("Hola")

Necesitamos:

mostrar_mensaje()

Enviar una cantidad incorrecta de argumentos

def sumar(a, b):
    return a + b


sumar(5)

La función espera dos argumentos, pero solamente recibió uno.

Confundir print con return

Mostrar un valor no significa devolverlo.

Crear funciones demasiado grandes

Si una función valida usuarios, calcula precios, envía correos y genera reportes al mismo tiempo, probablemente tenga demasiadas responsabilidades.

Utilizar nombres poco claros

Un nombre como f1() dice muy poco sobre su propósito.

Un nombre como calcular_promedio() explica mucho mejor qué tarea realiza.

Buenas prácticas al crear funciones

  • Utiliza nombres que describan la tarea.
  • Procura que cada función tenga una responsabilidad clara.
  • Evita funciones innecesariamente largas.
  • Utiliza parámetros para recibir la información necesaria.
  • Devuelve resultados cuando otra parte del programa deba utilizarlos.
  • Valida los datos cuando una entrada incorrecta pueda provocar problemas.
  • Divide tareas complejas en funciones más pequeñas cuando mejore la claridad.
Una pregunta útil

Si necesitas copiar el mismo bloque de código varias veces, pregúntate si podría convertirse en una función reutilizable.

Compruébalo tú mismo

Crea una función llamada calcular_promedio() que reciba tres notas y devuelva el promedio.

Después guarda el resultado en una variable y muéstralo.

Intenta resolverlo antes de ver la solución.

Ver una posible solución
def calcular_promedio(nota1, nota2, nota3):
    suma = nota1 + nota2 + nota3
    return suma / 3


promedio = calcular_promedio(
    80,
    90,
    70
)

print(f"Promedio: {promedio}")

La función recibe tres valores, calcula la suma y devuelve el promedio.

El resultado será:

Promedio: 80.0
Reto adicional

Crea otra función llamada aprobo() que reciba el promedio y devuelva True cuando sea 70 o superior.

Preguntas frecuentes

¿Cuál es la diferencia entre parámetro y argumento?

Un parámetro es el nombre definido en la función para recibir información. Un argumento es el valor concreto que enviamos cuando llamamos la función.

¿Una función siempre necesita return?

No. Una función puede realizar acciones sin devolver un resultado. Sin embargo, return permite entregar un valor para utilizarlo posteriormente.

¿Por qué conviene utilizar funciones?

Ayudan a evitar repetición de código, separar responsabilidades, reutilizar soluciones y hacer que los programas sean más fáciles de mantener.

Cómo diseñar una función clara

Una función resulta más fácil de comprender cuando tiene una responsabilidad definida. Antes de escribirla, pregúntate qué información necesita, qué tarea realiza y qué resultado debería producir.

Ejemplo conceptual

Una función llamada calcularTotal puede recibir precios y devolver el total. Si además envía correos, modifica la interfaz y guarda datos, probablemente está acumulando demasiadas responsabilidades.

Parámetros y retorno

Los parámetros permiten proporcionar información a una función. El valor de retorno permite entregar un resultado a quien la llamó. Separar entradas, procesamiento y salida ayuda a crear funciones reutilizables y más sencillas de probar.

Ventajas de dividir un programa

  • Evita repetir la misma lógica.
  • Facilita probar partes pequeñas.
  • Permite asignar nombres a operaciones importantes.
  • Hace que los cambios estén más localizados.
Señal útil

Si necesitas una explicación muy larga para describir qué hace una función, considera dividirla en funciones más pequeñas con responsabilidades claras.

Conclusión

Las funciones permiten agrupar instrucciones bajo un nombre y reutilizarlas siempre que el programa las necesite.

Los parámetros permiten recibir datos, mientras que return permite devolver resultados para utilizarlos en otras partes del programa.

Comprender bien las funciones es fundamental porque después podrás combinarlas con variables, condicionales, bucles, listas y objetos para construir programas mucho más organizados.

Artículo creado por

ByteNova

Proyecto educativo creado por Dylan Estrada. ByteNova publica contenido sobre programación, desarrollo web, inteligencia artificial y ciberseguridad con un enfoque claro para principiantes y revisión editorial continua.

Conoce más sobre ByteNova →