Funciones en Python: def, return y Parámetros — Guía Completa con Ejercicios
Aprende a crear funciones en Python desde cero. def, return, parámetros por defecto, *args, **kwargs, funciones lambda y recursividad con ejemplos resueltos en español.
1¿Qué es una función y para qué sirve?
Una función es un bloque de código con nombre que realiza una tarea específica y puede reutilizarse cuantas veces sea necesario. En lugar de repetir el mismo código, lo defines una vez y lo llamas cuando lo necesites.
- Reutilización: escribe una vez, usa muchas veces
- Organización: código más limpio y fácil de leer
- Mantenimiento: corriges el error en un solo lugar
- Modularidad: divide problemas grandes en pequeños
2Definir y llamar funciones: def
La palabra clave def define una función. La indentación (4 espacios) delimita el cuerpo de la función.
# Estructura básica de una función def nombre_funcion(parametro1, parametro2): """Docstring: descripción de la función""" # Cuerpo de la función resultado = parametro1 + parametro2 return resultado # ─── Ejemplos reales ─────────────────────────── def saludar(): """Función sin parámetros ni retorno""" print("¡Hola desde una función!") def sumar(a, b): """Función con parámetros y retorno""" return a + b def presentar(nombre, edad): """Función con varios parámetros""" print(f"Me llamo {nombre} y tengo {edad} años") # Llamar (invocar) las funciones saludar() print(sumar(10, 5)) presentar("Ana", 22)
¡Hola desde una función! 15 Me llamo Ana y tengo 22 años
3Parámetros y valores de retorno
Una función puede retornar uno o varios valores con la instrucción return. También puede retornar distintos tipos de datos.
# Retornar un solo valor def area_circulo(radio): import math return math.pi * radio ** 2 # Retornar múltiples valores def min_max(lista): return min(lista), max(lista) # Retornar un diccionario def estadisticas(numeros): return { "total" : len(numeros), "suma" : sum(numeros), "min" : min(numeros), "max" : max(numeros), "promedio": sum(numeros) / len(numeros) } # Usar las funciones print(f"Área: {area_circulo(5):.2f}") minimo, maximo = min_max([3, 1, 7, 4, 9]) print(f"Mín: {minimo}, Máx: {maximo}") stats = estadisticas([10, 20, 30, 40, 50]) print(f"Promedio: {stats['promedio']}")
Área: 78.54 Mín: 1, Máx: 9 Promedio: 30.0
4Parámetros con valores por defecto
Puedes asignar un valor por defecto a los parámetros. Si el usuario no pasa ese argumento al llamar la función, se usará el valor por defecto.
def crear_perfil(nombre, edad, pais="Colombia", activo=True): print(f"Nombre: {nombre}") print(f"Edad: {edad}") print(f"País: {pais}") print(f"Activo: {activo}\n") # Usando los valores por defecto crear_perfil("Ana", 25) # Sobreescribiendo valores por defecto crear_perfil("Luis", 30, "México") # Argumentos por nombre (keyword arguments) crear_perfil(nombre="María", edad=28, activo=False, pais="Argentina")
Nombre: Ana Edad: 25 País: Colombia Activo: True Nombre: Luis Edad: 30 País: México Activo: True Nombre: María Edad: 28 País: Argentina Activo: False
5*args y **kwargs
Cuando no sabes cuántos argumentos recibirá una función, puedes usar *args (argumentos posicionales) y **kwargs (argumentos por nombre).
# *args: recibe cualquier cantidad de argumentos def sumar_todo(*numeros): total = sum(numeros) print(f"Suma de {numeros} = {total}") sumar_todo(1, 2) sumar_todo(10, 20, 30, 40) sumar_todo(5) # **kwargs: recibe argumentos con nombre def mostrar_info(**datos): print("=== Información ===") for clave, valor in datos.items(): print(f" {clave}: {valor}") mostrar_info(nombre="Pedro", edad=29, profesion="Ingeniero")
Suma de (1, 2) = 3 Suma de (10, 20, 30, 40) = 100 Suma de (5,) = 5 === Información === nombre: Pedro edad: 29 profesion: Ingeniero
6Funciones lambda
Las funciones lambda son funciones anónimas de una sola línea. Son útiles para operaciones simples y se usan mucho con sorted(), map() y filter().
# Lambda básico cuadrado = lambda x: x ** 2 print(cuadrado(5)) # 25 suma = lambda a, b: a + b print(suma(3, 7)) # 10 # Lambda con sorted() — ordenar lista de dicts estudiantes = [ {"nombre": "Ana", "nota": 4.5}, {"nombre": "Luis", "nota": 3.2}, {"nombre": "María", "nota": 4.8}, ] por_nota = sorted(estudiantes, key=lambda e: e["nota"], reverse=True) for e in por_nota: print(f"{e['nombre']:8} → {e['nota']}") # Lambda con filter() — filtrar números pares numeros = [1, 2, 3, 4, 5, 6, 7, 8] pares = list(filter(lambda n: n % 2 == 0, numeros)) print("Pares:", pares)
25 10 María → 4.8 Ana → 4.5 Luis → 3.2 Pares: [2, 4, 6, 8]
7Funciones recursivas
Una función recursiva es aquella que se llama a sí misma. Es útil para resolver problemas que se pueden dividir en subproblemas del mismo tipo.
# Factorial: n! = n × (n-1) × ... × 1 def factorial(n): if n == 0 or n == 1: # caso base return 1 return n * factorial(n - 1) # llamada recursiva for i in range(8): print(f" {i}! = {factorial(i)}") # Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13... def fibonacci(n): if n <= 1: return n return fibonacci(n - 1) + fibonacci(n - 2) print("\nSerie Fibonacci:") serie = [fibonacci(i) for i in range(10)] print(serie)
0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 Serie Fibonacci: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
8🏋️ Ejercicios Prácticos Resueltos
Crea una calculadora completa usando funciones para cada operación, con un menú interactivo.
def sumar(a, b): return a + b def restar(a, b): return a - b def multiplicar(a, b):return a * b def dividir(a, b): if b == 0: return "Error: división por cero ❌" return a / b # Diccionario de operaciones (muy pythónico) operaciones = { "1": (sumar, "Suma"), "2": (restar, "Resta"), "3": (multiplicar, "Multiplicación"), "4": (dividir, "División"), } def calculadora(): print("=== CALCULADORA ===") for k, (_, nombre) in operaciones.items(): print(f" {k}. {nombre}") opcion = input("\nElige operación: ") if opcion not in operaciones: print("Opción inválida"); return a = float(input("Primer número: ")) b = float(input("Segundo número: ")) func, nombre = operaciones[opcion] resultado = func(a, b) print(f"\n{nombre}: {a} y {b} = {resultado}") calculadora()
¿Dominaste las funciones en Python? 🚀
¡Déjanos tus preguntas en los comentarios! Comparte con tus compañeros y suscríbete para más ejercicios resueltos.
- Programación Orientada a Objetos en Python
- Manejo de archivos en Python
- Listas y Diccionarios en Python
Comentarios
Publicar un comentario