Una función es un bloque de código reutilizable con un nombre específico, que puede recibir cero o más parámetros de entrada, ejecutar un conjunto de instrucciones y retornar un valor o simplemente realizar una acción. Este bloque puede ser llamado en cualquier parte del programa cuantas veces sea necesario, lo que permite estructurar mejor el código y evitar la repetición.
Las funciones son un pilar fundamental del paradigma de la programación estructurada, ya que permiten:
Python incluye muchas funciones integradas
(como print(), len(), range(), etc.), pero también
permite al programador definir sus propias funciones. Esto último es
esencial para escribir programas limpios, organizados y fáciles de mantener.
En Python, las funciones se definen con la palabra clave
def, seguida del nombre de la función, una lista de parámetros entre
paréntesis, y dos puntos : que indican el inicio del bloque de instrucciones.
def nombre_de_la_funcion(param1, param2, ...):
# Bloque de código
return valor
def saludar():
print("Hola, mundo!")
Para ejecutar esta función, simplemente la llamamos por su nombre:
saludar()
# Salida: Hola, mundo!
Las funciones pueden recibir datos mediante parámetros, que se especifican al definir la función. Al llamarla, se pasan los argumentos correspondientes.
Son los más comunes. Los valores se asignan a los parámetros según su posición.
def sumar(a, b):
return a + b
resultado = sumar(5, 3)
print(resultado) # Salida: 8
Si se pasan menos o más argumentos de los requeridos, se producirá un error.
Podemos especificar a qué parámetro corresponde cada argumento, usando clave=valor.
def restar(a, b):
return a - b
print(restar(a=10, b=3)) # Salida: 7
print(restar(b=3, a=10)) # También válido
Permiten que un parámetro tenga un valor predeterminado si no se especifica uno al llamar la función.
def saludar(nombre="invitado"):
print(f"Hola, {nombre}!")
saludar("Lucía") # Salida: Hola, Lucía!
saludar() # Salida: Hola, invitado!
Permiten pasar cualquier cantidad de argumentos posicionales, que se almacenan como una tupla.
def sumar_todo(*numeros):
return sum(numeros)
print(sumar_todo(1, 2, 3)) # Salida: 6
print(sumar_todo(4, 5, 6, 7, 8)) # Salida: 30
Permiten pasar cualquier cantidad de argumentos con nombre, que se almacenan como un diccionario.
def mostrar_info(**datos):
for clave, valor in datos.items():
print(f"{clave}: {valor}")
mostrar_info(nombre="Ana", edad=30, ciudad="Madrid")
La sentencia return sirve para:
def cuadrado(n):
return n ** 2
resultado = cuadrado(4)
print(resultado) # Salida: 16
def operaciones(a, b):
suma = a + b
producto = a * b
return suma, producto
s, p = operaciones(3, 5)
print(f"Suma: {s}, Producto: {p}")
Una buena práctica en programación es documentar nuestras
funciones. Esto se logra usando docstrings, que son cadenas de texto
encerradas entre triple comillas """ justo después de la definición de la
función.
def saludar(nombre):
"""Esta función imprime un saludo personalizado.
Parámetros:
nombre (str): El nombre de la persona a saludar.
"""
print(f"Hola, {nombre}!")
Esta documentación puede ser consultada con la función
help():
help(saludar)
Python permite indicar el tipo de los parámetros y del valor de retorno mediante anotaciones de tipo, lo cual mejora la legibilidad y ayuda a herramientas como linters o editores de código.
def multiplicar(a: int, b: int) -> int:
return a * b
Estas anotaciones no son obligatorias ni generan errores si se pasan tipos distintos, pero son una buena práctica para programar de forma más segura y clara.