Funciones: Crea tu Propio Codigo Reutilizable
Las funciones son uno de los conceptos mas poderosos en programacion. Sin funciones, copias el mismo codigo muchas veces. Con funciones, lo escribes una vez y lo reutilizas donde quieras.
Que es una funcionUna funcion es un bloque de codigo con nombre que realiza una tarea especifica. Ya has usado print(), len(), range(). Ahora crearás las tuyas propias.
Definir una funciondef nombre_funcion(parametros):
"""Documentacion (docstring)"""
# Codigo
return resultado
Primera funcion
def saludar():
print('Hola! Bienvenido a Python.')
saludar()
saludar()
Parametros y argumentos
def saludar_persona(nombre):
print(f'Hola, {nombre}! Bienvenido.')
saludar_persona('Ana')
saludar_persona('Carlos')
Multiples parametros
def calcular_area(base, altura):
return base * altura
area = calcular_area(10, 5)
print(f'Area: {area}')
La sentencia return
def calcular_iva(precio, tasa=0.16):
iva = precio * tasa
return precio + iva
producto1 = calcular_iva(100)
producto2 = calcular_iva(250, 0.21)
print(f'Con IVA 16%: {producto1}')
print(f'Con IVA 21%: {producto2}')
Retornar multiples valores
def estadisticas(numeros):
return min(numeros), max(numeros), sum(numeros) / len(numeros)
datos = [23, 45, 12, 67, 34, 89, 10]
min_val, max_val, prom = estadisticas(datos)
print(f'Min: {min_val}, Max: {max_val}, Prom: {prom:.2f}')
Parametros por defecto
def crear_perfil(nombre, edad, pais='Argentina', activo=True):
return {'nombre': nombre, 'edad': edad, 'pais': pais, 'activo': activo}
perfil1 = crear_perfil('Ana', 28)
perfil2 = crear_perfil('John', 35, 'Estados Unidos', False)
print(perfil1)
print(perfil2)
Argumentos keyword
def enviar_email(destinatario, asunto, cuerpo, copia=None):
print(f'Para: {destinatario}')
print(f'Asunto: {asunto}')
if copia:
print(f'CC: {copia}')
enviar_email(
asunto='Reunion importante',
cuerpo='Por favor confirma tu asistencia.',
destinatario='[email protected]'
)
*args y **kwargs
def calcular_total(*precios):
return sum(precios)
print(calcular_total(10, 20))
print(calcular_total(5, 15, 25, 35))
def registrar_evento(**datos):
for clave, valor in datos.items():
print(f'{clave}: {valor}')
registrar_evento(tipo='compra', usuario='[email protected]', monto=250)
Funciones lambda
cuadrado = lambda x: x ** 2
print(cuadrado(5))
estudiantes = [
{'nombre': 'Ana', 'nota': 95},
{'nombre': 'Carlos', 'nota': 87},
{'nombre': 'Maria', 'nota': 92}
]
ordenados = sorted(estudiantes, key=lambda e: e['nota'], reverse=True)
for e in ordenados:
print(f"{e['nombre']}: {e['nota']}")
Variables locales y globales
cuenta = 1000
def hacer_deposito(monto):
return cuenta + monto
def hacer_retiro(monto):
global cuenta
if monto <= cuenta:
cuenta -= monto
return True
return False
print(f'Saldo: {cuenta}')
print(f'Con deposito: {hacer_deposito(500)}')
hacer_retiro(200)
print(f'Despues de retiro: {cuenta}')
Proyecto: Sistema de facturacion
def calcular_subtotal(productos):
return sum(p['precio'] * p['cantidad'] for p in productos)
def aplicar_descuento(subtotal, pct):
desc = subtotal * (pct / 100)
return subtotal - desc, desc
def calcular_iva(monto, tasa=0.16):
return monto * tasa
def generar_factura(cliente, productos, descuento_pct=0):
subtotal = calcular_subtotal(productos)
neto, desc = aplicar_descuento(subtotal, descuento_pct)
iva = calcular_iva(neto)
total = neto + iva
print('FACTURA - ' + cliente.upper())
for p in productos:
print(f"{p['nombre']} x{p['cantidad']} = {p['precio'] * p['cantidad']}")
print(f'Subtotal: {subtotal}')
if descuento_pct:
print(f'Descuento {descuento_pct}%: -{desc:.2f}')
print(f'IVA 16%: {iva:.2f}')
print(f'TOTAL: {total:.2f}')
return total
carrito = [
{'nombre': 'Laptop', 'precio': 800, 'cantidad': 2},
{'nombre': 'Mouse', 'precio': 25, 'cantidad': 5},
{'nombre': 'Teclado', 'precio': 60, 'cantidad': 2},
]
generar_factura('Empresa ABC', carrito, descuento_pct=10)
Buenas practicas
- Una funcion, una responsabilidad.
- Nombres descriptivos: calcular_promedio() mejor que calc().
- Documenta con docstrings.
- Mantén funciones cortas (menos de 20-30 lineas).
💡 Concepto Clave
Revisemos los puntos más importantes de esta lección antes de continuar.
Resumen
- Se definen con def nombre(parametros): ... return valor
- Parametros por defecto hacen las funciones flexibles
- *args y **kwargs para numero variable de argumentos
- Las lambdas son funciones anonimas para operaciones simples
En la proxima leccion: manejo de errores con try/except.
🧠 Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
- Comprendo el concepto principal y puedo explicarlo con mis palabras
- Entiendo cómo aplicarlo en mi situación específica
- Necesito repasar algunas partes antes de continuar
- Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.