Definición de funciones: sintaxis y estructura
Introducción
Las funciones son bloques de código reutilizables diseñados para realizar una tarea específica. Son uno de los elementos más importantes en la programación con Python, ya que nos permiten organizar nuestro código en unidades lógicas, evitar la repetición y hacer nuestros programas más legibles y mantenibles. Imagina las funciones como pequeñas "máquinas" que aceptan datos (entradas), realizan operaciones con ellos y producen resultados (salidas).
En este artículo aprenderemos cómo definir y utilizar funciones en Python, explorando su sintaxis básica y comprendiendo los elementos estructurales que las componen. Dominar el uso de funciones es fundamental para avanzar en nuestra capacidad de escribir programas más complejos y profesionales.
Sintaxis básica de una función
En Python, una función se define utilizando la palabra clave def
, seguida del nombre de la función y un par de paréntesis. La estructura básica es la siguiente:
def nombre_funcion():
# Cuerpo de la función (instrucciones)
# Este código se ejecutará cuando se llame a la función
print("Mi primera función")
Para ejecutar (o "llamar") a una función, simplemente escribimos su nombre seguido de paréntesis:
# Definimos la función
def saludar():
print("¡Hola! Bienvenido al tutorial de Python")
# Llamamos a la función
saludar() # Salida: ¡Hola! Bienvenido al tutorial de Python
Anatomía de una función
Veamos los componentes principales de una función:
def calcular_area_rectangulo(base, altura):
"""
Calcula el área de un rectángulo.
Parámetros:
base (float): La base del rectángulo
altura (float): La altura del rectángulo
Retorna:
float: El área calculada
"""
area = base * altura
return area
Los elementos de esta función son:
- Palabra clave
def
: Indica a Python que estamos definiendo una función - Nombre de la función:
calcular_area_rectangulo
(debe seguir las convenciones de nomenclatura de Python) - Parámetros:
base, altura
(variables que reciben valores al llamar a la función) - Docstring: El texto entre triples comillas (
"""
) que documenta la función - Cuerpo de la función: El código indentado que implementa la lógica
- Sentencia
return
: Especifica el valor que la función devuelve al ser llamada
Invocación de funciones
Para utilizar una función, debemos invocarla o llamarla:
# Definición de la función
def calcular_area_rectangulo(base, altura):
area = base * altura
return area
# Llamadas a la función con diferentes argumentos
area1 = calcular_area_rectangulo(5, 3)
print(f"El área del primer rectángulo es: {area1}") # Salida: El área del primer rectángulo es: 15
area2 = calcular_area_rectangulo(7.5, 2.3)
print(f"El área del segundo rectángulo es: {area2}") # Salida: El área del segundo rectángulo es: 17.25
Funciones sin parámetros
Las funciones más simples no necesitan recibir información:
def mostrar_menu():
print("==== MENÚ PRINCIPAL ====")
print("1. Comenzar juego")
print("2. Cargar partida")
print("3. Configuración")
print("4. Salir")
print("=======================")
# Llamada a la función
mostrar_menu()
Funciones que no devuelven valores
No todas las funciones necesitan devolver un valor explícitamente:
def saludar_usuario(nombre):
print(f"Hola {nombre}, ¡bienvenido/a al programa!")
# Esta función no tiene return
# Llamada a la función
saludar_usuario("María") # Salida: Hola María, ¡bienvenido/a al programa!
# Si intentamos capturar un valor de retorno, obtendremos None
resultado = saludar_usuario("Carlos")
print(f"Valor devuelto: {resultado}") # Salida: Valor devuelto: None
En Python, si una función no tiene una sentencia return
o tiene un return
sin valor, implícitamente devuelve None
.
La sentencia return
La sentencia return
tiene dos propósitos principales:
- Especificar el valor que la función devuelve
- Finalizar la ejecución de la función
def es_mayor_edad(edad):
if edad >= 18:
return True
return False # Esta línea solo se ejecuta si no se cumple la condición anterior
# Probando la función
print(es_mayor_edad(20)) # Salida: True
print(es_mayor_edad(15)) # Salida: False
Una función puede tener múltiples sentencias return
, pero solo se ejecutará una de ellas:
def calificar_nota(puntuacion):
if puntuacion < 5:
return "Suspenso"
elif puntuacion < 7:
return "Aprobado"
elif puntuacion < 9:
return "Notable"
else:
return "Sobresaliente"
# Probando diferentes puntuaciones
print(calificar_nota(4.5)) # Salida: Suspenso
print(calificar_nota(6.7)) # Salida: Aprobado
print(calificar_nota(9.2)) # Salida: Sobresaliente
Docstrings: documentando funciones
Es una buena práctica documentar nuestras funciones utilizando docstrings (cadenas de documentación):
def calcular_iva(precio, porcentaje=21):
"""
Calcula el IVA de un precio dado.
Esta función aplica el tipo de IVA indicado a un precio
y devuelve el importe del impuesto.
Args:
precio (float): El precio base sin IVA
porcentaje (int, opcional): El porcentaje de IVA a aplicar. Por defecto es 21
Returns:
float: El importe del IVA calculado
"""
return precio * (porcentaje / 100)
# Usando la función
producto_precio = 100
iva = calcular_iva(producto_precio)
print(f"Precio: {producto_precio}€")
print(f"IVA (21%): {iva}€")
print(f"Total: {producto_precio + iva}€")
# También podemos consultar la documentación
help(calcular_iva) # Muestra la documentación de la función
Convenciones de nomenclatura
En Python, las funciones suelen seguir estas convenciones:
- Nombres en minúsculas
- Palabras separadas por guiones bajos (snake_case)
- Nombres descriptivos que indiquen qué hace la función
# Bueno: nombre descriptivo y snake_case
def calcular_promedio_notas(lista_notas):
return sum(lista_notas) / len(lista_notas)
# Malo: no descriptivo y camelCase
def calFunc(x):
return sum(x) / len(x)
Indentación y estructura de las funciones
Python utiliza la indentación para delimitar bloques de código. En las funciones, el cuerpo debe estar indentado (generalmente con 4 espacios):
def es_primo(numero):
# Casos especiales
if numero <= 1:
return False
if numero <= 3:
return True
# Si es divisible por 2 o 3, no es primo
if numero % 2 == 0 or numero % 3 == 0:
return False
# Comprobar divisibilidad por números de la forma 6k±1
i = 5
while i * i <= numero:
if numero % i == 0 or numero % (i + 2) == 0:
return False
i += 6
return True
# Probamos la función
for n in range(1, 21):
if es_primo(n):
print(f"{n} es un número primo")
Funciones como ciudadanos de primera clase
En Python, las funciones son "ciudadanos de primera clase", lo que significa que pueden:
- Asignarse a variables
- Pasarse como argumentos a otras funciones
- Devolverse como resultado de otras funciones
# Asignar función a una variable
def duplicar(x):
return x * 2
operacion = duplicar
print(operacion(5)) # Salida: 10
# Función que acepta otra función como argumento
def aplicar_operacion(func, valor):
resultado = func(valor)
print(f"El resultado es: {resultado}")
# Usando la función
aplicar_operacion(duplicar, 8) # Salida: El resultado es: 16
Funciones anidadas
Python permite definir funciones dentro de otras funciones:
def calculadora(operacion):
def suma(a, b):
return a + b
def resta(a, b):
return a - b
# Elegir la operación adecuada
if operacion == "suma":
return suma
elif operacion == "resta":
return resta
# Usando la función
operacion_suma = calculadora("suma")
resultado = operacion_suma(10, 5)
print(f"El resultado de la suma es: {resultado}") # Salida: El resultado de la suma es: 15
Resumen
Las funciones son bloques de código reutilizables que nos permiten organizar nuestro programa de manera más eficiente. Hemos aprendido la sintaxis básica para definir funciones en Python, cómo utilizarlas con y sin parámetros, cómo devolver valores con la sentencia return
y la importancia de documentarlas adecuadamente.
Dominar la creación y uso de funciones es un paso crucial en tu aprendizaje de Python, ya que te permite escribir código más organizado, legible y mantenible. En los próximos artículos, profundizaremos en conceptos más avanzados relacionados con las funciones, como los diferentes tipos de parámetros y el ámbito de las variables.