¿Qué son las Funciones?
Las funciones son bloques de código reutilizable que realizan una tarea específica. Ayudan a organizar el código y evitar repetición.
Definir Funciones
# Función básica
def saludar():
print("¡Hola, mundo!")
saludar() # Llamar la función
# Función con parámetros
def saludar_persona(nombre):
print(f"¡Hola, {nombre}!")
saludar_persona("Ana") # ¡Hola, Ana!Return - Retornar Valores
def suma(a, b):
return a + b
resultado = suma(5, 3)
print(resultado) # 8
# Retornar múltiples valores
def operaciones(a, b):
return a + b, a - b, a * b
s, r, m = operaciones(10, 5)
print(f"Suma: {s}, Resta: {r}, Multiplicación: {m}")Parámetros por Defecto
def saludar(nombre="Usuario", mensaje="Bienvenido"):
print(f"{mensaje}, {nombre}!")
saludar() # Bienvenido, Usuario!
saludar("Ana") # Bienvenido, Ana!
saludar("Luis", "Hola") # Hola, Luis!Argumentos por Posición y Nombre
def presentar(nombre, edad, ciudad):
print(f"{nombre} tiene {edad} años y vive en {ciudad}")
# Por posición
presentar("Ana", 25, "Madrid")
# Por nombre (keyword arguments)
presentar(ciudad="Barcelona", nombre="Luis", edad=30)
# Mixto
presentar("María", edad=28, ciudad="Sevilla")*args - Argumentos Variables
# Acepta cualquier cantidad de argumentos
def sumar_todos(*numeros):
total = 0
for num in numeros:
total += num
return total
print(sumar_todos(1, 2, 3)) # 6
print(sumar_todos(1, 2, 3, 4, 5)) # 15
print(sumar_todos(10, 20)) # 30**kwargs - Argumentos con Nombre Variables
def mostrar_info(**datos):
for clave, valor in datos.items():
print(f"{clave}: {valor}")
mostrar_info(nombre="Ana", edad=25, ciudad="Madrid")
# nombre: Ana
# edad: 25
# ciudad: Madrid
# Combinando *args y **kwargs
def funcion_completa(*args, **kwargs):
print("Args:", args)
print("Kwargs:", kwargs)
funcion_completa(1, 2, 3, nombre="Ana", edad=25)Funciones Lambda
Funciones anónimas de una sola línea:
# Sintaxis: lambda argumentos: expresión
# Función normal
def cuadrado(x):
return x ** 2
# Equivalente con lambda
cuadrado_lambda = lambda x: x ** 2
print(cuadrado_lambda(5)) # 25
# Con múltiples argumentos
suma = lambda a, b: a + b
print(suma(3, 7)) # 10
# Uso con map()
numeros = [1, 2, 3, 4, 5]
cuadrados = list(map(lambda x: x**2, numeros))
print(cuadrados) # [1, 4, 9, 16, 25]
# Uso con filter()
pares = list(filter(lambda x: x % 2 == 0, numeros))
print(pares) # [2, 4]Scope - Ámbito de Variables
# Variable global
x = 10
def funcion():
# Variable local
y = 20
print(f"Dentro: x={x}, y={y}")
funcion()
print(f"Fuera: x={x}")
# print(y) # Error: y no existe fuera
# Modificar variable global
contador = 0
def incrementar():
global contador
contador += 1
incrementar()
print(contador) # 1Funciones Recursivas
# Factorial
def factorial(n):
if n == 0 or n == 1:
return 1
else:
return n * factorial(n - 1)
print(factorial(5)) # 120
# Fibonacci
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(7)) # 13Decoradores Básicos
Los decoradores modifican el comportamiento de funciones:
def mi_decorador(funcion):
def envoltura():
print("Antes de la función")
funcion()
print("Después de la función")
return envoltura
@mi_decorador
def saludar():
print("¡Hola!")
saludar()
# Salida:
# Antes de la función
# ¡Hola!
# Después de la funciónDocstrings - Documentación
def calcular_area(base, altura):
"""
Calcula el área de un triángulo.
Args:
base (float): La base del triángulo
altura (float): La altura del triángulo
Returns:
float: El área del triángulo
"""
return (base * altura) / 2
# Ver documentación
print(calcular_area.__doc__)Ejemplos Prácticos
Validador de Email
def validar_email(email):
if "@" in email and "." in email:
return True
return False
print(validar_email("usuario@example.com")) # True
print(validar_email("invalido")) # FalseCalculadora
def calculadora(num1, num2, operacion):
operaciones = {
"suma": lambda a, b: a + b,
"resta": lambda a, b: a - b,
"multiplicacion": lambda a, b: a * b,
"division": lambda a, b: a / b if b != 0 else "Error"
}
return operaciones.get(operacion, lambda a, b: "Operación inválida")(num1, num2)
print(calculadora(10, 5, "suma")) # 15Generador de Contraseñas
import random
import string
def generar_password(longitud=12):
caracteres = string.ascii_letters + string.digits + string.punctuation
password = ''.join(random.choice(caracteres) for _ in range(longitud))
return password
print(generar_password()) # Contraseña aleatoria
print(generar_password(20)) # Contraseña de 20 caracteresConclusión
Las funciones son fundamentales para escribir código limpio, organizado y reutilizable. Domina estos conceptos para convertirte en un mejor programador Python.