¿Qué son las funciones en programación?
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í:
-
defindica que estamos definiendo una función. -
saludares 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.
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)
Diferencia entre print() y return
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.
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.
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
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.
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.
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.
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 →