Definición de una función
Puedes definir una función utilizando la palabra clave def
, seguida del nombre de la función, paréntesis y dos puntos. Los argumentos de la función se colocan entre los paréntesis.
Debes definir el valor de retorno mediante la palabra reserva return
. En caso de no indicarlo, la función terminará completamente.
def mi_funcion(parametro1, parametro2):
# Código de la función
return resultado
Utilización de funciones
Una vez definida, puedes llamar a la función usando su nombre seguido de los argumentos entre paréntesis.
resultado = mi_funcion(valor1, valor2)
Valores predeterminados y argumentos con nombre
Las funciones en Python pueden tener argumentos con valores predeterminados, lo que significa que si no se proporciona un valor al llamar a la función, se usará el valor por defecto. Esto permite que la función sea flexible y se adapte a diferentes situaciones.
def ejemplo(arg1, arg2=5):
return arg1 + arg2
resultado = ejemplo(3) # resultado es 8 (usa el valor predeterminado de arg2)
resultado = ejemplo(3, 10) # resultado es 13 (se sobrescribe el valor predeterminado)
Además, puedes llamar a una función utilizando argumentos con nombre. Esto te permite especificar los valores de los argumentos sin tener que seguir el orden definido en la función.
def saludar(nombre, mensaje="Hola"):
return f"{mensaje}, {nombre}!"
print(saludar("Ana")) # Imprime: Hola, Ana!
print(saludar("Ana", mensaje="Saludos")) # Imprime: Saludos, Ana!
Esto es útil para mejorar la legibilidad del código y para evitar errores cuando una función tiene muchos argumentos o cuando algunos de ellos tienen valores predeterminados.
Funciones anónimas (Lambdas)
Python permite crear funciones anónimas con la palabra clave lambda
. Estas funciones son útiles para operaciones simples que se utilizan una sola vez.
suma = lambda x, y: x + y
resultado = suma(3, 4) # resultado es 7
Argumentos variables
Puedes definir funciones que acepten un número variable de argumentos utilizando *args
para argumentos posicionales y **kwargs
para argumentos con nombre.
def sumar_todos(*args):
return sum(args)
resultado = sumar_todos(1, 2, 3) # resultado es 6
def imprimir_info(**kwargs):
for clave, valor in kwargs.items():
print(f"{clave}: {valor}")
imprimir_info(nombre="Juan", edad=30)
Funciones como objetos de primera clase
En Python, las funciones son “objetos de primera clase”, lo que significa que se pueden pasar como argumentos a otras funciones, retornarse desde funciones, y asignarse a variables.
def aplicar_funcion(func, valor):
return func(valor)
resultado = aplicar_funcion(lambda x: x**2, 5) # resultado es 25
Documentación de funciones (Docstrings)
Es una buena práctica documentar tus funciones utilizando una cadena de texto al inicio de la definición de la función, llamada Docstring. Esto permite que otros programadores (o tú mismo) puedan entender qué hace la función sin tener que hacer una revisión exhaustiva del código.
def saludar(nombre):
"""Esta función devuelve un saludo personalizado."""
return f"Hola, {nombre}!"
Los docstrings pueden incluir información detallada sobre los parámetros y valores de retorno de la función, lo cual es útil para funciones más complejas. Existen varias convenciones sobre cómo estructurar los docstrings, entre las más comunes están el formato reStructuredText (reST) y el estilo de Google.
Como ejemplo, a continuación hay una función documentada usando el estilo de Google:
def analizar_ventas(ventas, descuento=0.1, umbral_premium=1000):
"""Analiza las ventas y calcula estadísticas de productos.
Esta función procesa una lista de ventas y calcula el total,
promedio, y aplica descuentos a productos premium.
Args:
ventas: Lista de precios de productos vendidos.
descuento: Porcentaje de descuento para productos premium (0.0-1.0).
umbral_premium: Precio mínimo para considerar un producto como premium.
Returns:
Diccionario con las siguientes claves:
- total: Suma total de todas las ventas
- promedio: Precio promedio de los productos
- premium_con_descuento: Total de productos premium con descuento aplicado
"""
if not ventas:
return {"total": 0, "promedio": 0, "premium_con_descuento": 0}
total = sum(ventas)
promedio = total / len(ventas)
premium_items = [v for v in ventas if v >= umbral_premium]
premium_con_descuento = sum(p * (1 - descuento) for p in premium_items)
return {
"total": round(total, 2),
"promedio": round(promedio, 2),
"premium_con_descuento": round(premium_con_descuento, 2),
}